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

decltypeC++11で使用できます。

于 2012-06-26T22:01:50.313 に答える
1

はいといいえ。ポインテッド型とは何かがテンプレートであることがわかっているジェネリック型から抽出できます。しかし、関数でそれを行うことはできません。簡単な実装はstd::remove_pointerC++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 に答える