如何在C++中声明运行时的第n个指针

Xoc*_*zin 4 c++ syntax pointers

指针可以这样声明:

int
    a = 1,
    *b = &a,      // 1st order pointer
    **c = &b,     // 2nd order pointer
    ***d = &c,    // 3rd order pointer
    ****e = &d,   // 4th order pointer
    *****f = &e,  // 5th order pointer
    *** n-stars *** f;  // n-th order pointer
Run Code Online (Sandbox Code Playgroud)

在这里,我们需要在编译时知道指针的顺序.是否可以声明一个指针,其顺序只在运行时知道?链接到这个问题的是,是否可以在运行时查询任意指针的顺序?

int order = GET_ORDER_OF_PTR(f) // returns 5
int /* insert some syntax here to make ptr a pointer of order (order + 1) */ ptr = &f;
Run Code Online (Sandbox Code Playgroud)

注意:我已经知道这(通常)可能不是一个好主意.还是想知道它是否可行:)

Woj*_*wka 8

在运行时你不能 - 因为C++是静态类型的.在编译期间,可以使用模板,例如

template<typename T, int order> struct P
{
  typedef typename P<T, order-1>::pointer* pointer;
};

template<typename T> struct P<T, 0>
{
  typedef T pointer;
};
Run Code Online (Sandbox Code Playgroud)

P<int, 3>::pointer相当于int***.