0

我试图从传递给宏的指针中提取类类型。这是我到目前为止所拥有的

template <class CLASS> class getter
{
public:
    typedef CLASS type;
};
template <class CLASS> getter<CLASS> func(const CLASS* const)
{
    return getter<CLASS>();
}
...
#define GETTYPE(PTR) func(p)::type
...
MyClass *p = new MyClass;
...
GETTYPE(p) myClass;

这甚至可能吗?我在吠叫错误的树吗?

4

2 回答 2

2

您可以decltype在 C++11 中使用。

于 2012-06-26T22:01:50.313 回答
1

是和不是。您可以从知道它是模板的泛型类型中提取指向的类型。但是你不能用函数来做到这一点。一个简单的实现是std::remove_pointer在 C++11 中,它是在以下行中实现的:

template <typename T>
struct remove_ptr {       // Non pointer generic implementation
   typedef T type;
};
template <typename T>
struct remove_ptr<T*> {   // Ptr specialization:
   typedef T type;
};

采用:

template <typename T> void foo( T x ) {
   typedef typename remove_ptr<T>::type underlying_type;
}
int main() {
   foo( (int*)0 ); // underlying_type inside foo is int
   foo( 0 );       // underlying_type inside foo is also int
}
于 2012-06-26T21:54:12.207 回答