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)
注意:我已经知道这(通常)可能不是一个好主意.还是想知道它是否可行:)
在运行时你不能 - 因为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***.