首页 > 解决方案 > 通过类模板的特化获取类类型的名称

问题描述

我试图通过它的定义来设置name模板类的变量。A

我受到这个答案的启发。我当前的文件如下所示:

头文件

namespace N {
    // Definition of class A
    template <class T> class A {
    public:
         A();

         static const char* name;
    }

/*1*/ #define REGISTER_TYPE(T) template <> class N::A<T>::name = #T;
}

源文件

namespace N {
    template<class T>
    A<T>::A() 
    {
        //empty constructor
    }
}
REGISTER_TYPE(N::MyOtherClass);

但不知何故,错误消息'name' in 'class N::A<N::MyOtherClass>' does not name a typeexpected unqualified-id before '=' token(行/*1*/)弹出,但具有此名称的变量存在。

我正在使用 C++17。我已经尝试过

我在哪里做错了?

谢谢你的帮助!

//编辑:

在评论中解决。结果是:

#define REGISTER_TYPE(T) template <> const char * N::A<T>::name = #T;

标签: c++templates

解决方案


推荐阅读