C++中有没有一种方法可以反映变量的“指针级别数”(例如,int* a
为1级,int** b
是 2 个级别,并且int c
是 0 级)
..除了使用typeid
并解析从中产生的字符串?
我问的原因是我正在使用指向成员函数的指针 http://www.goingware.com/tips/member-pointers.html,我需要知道是否调用成员函数obj->func()
or obj.func()
,实际上是在编译时。
If obj
is a T**
, doing obj.*foo
格式不正确。所以你只需要弄清楚它是指针还是非指针。您可以为此使用重载。
template<typename T, typename M> void f(T *obj, M m) { // pointer
(obj->*m)();
}
template<typename T, typename M> void f(T &obj, M m) { // not a pointer
(obj.*m)();
}
这样做的缺点是它仅适用于零参数成员函数指针,并且不会返回这些函数返回的值(如果有)。您不能执行以下操作(可以轻松实现),因为两个分支都将进行类型检查
if(is_pointer(obj)) v = (obj->*m)(arg...); else v = (obj.*m)(args...);
你什么can要做的就是调用一个函数来取消引用您的对象(如果它是指针)
template<typename T> T &deref(T *t) { return *t; }
template<typename T> T &deref(T &t) { return t; }
然后你可以说
v = (deref(obj).*m)(args...);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)