我试图在运行时使用带有静态成员的模板结构来存储有关类的信息,但是我无法在没有错误的情况下获取或设置静态成员。
为什么这段代码不起作用?
template <typename T>
struct InfoHolder
{
static const char* name;
};
int main()
{
InfoHolder<int>::name = "This is an integer";
cout << InfoHolder<int>::name << endl;
return 0;
}
答案 0 :(得分:2)
如果您收到链接器错误。您必须在某处定义name
变量。 (在类中声明它不会在任何地方分配它,因为它不是对象的一部分)
在课后和主要课程之前写下这个:
template <typename T>
const char *InfoHolder<T>::name;
这对静态数据成员来说是一个小小的不便。
答案 1 :(得分:0)
我看到这在其他地方使用过;
由于未分配struct中的静态成员,我可以使用函数中的静态成员,并返回变量的指针。
template <typename T>
struct InfoHolder
{
static const char** getName()
{
static const char* name;
return &name;
}
};
int main()
{
*InfoHolder<int>::getName() = "This is an integer";
*InfoHolder<MyClass>::getName() = "This is an MyClass";
*InfoHolder<OtherClass>::getName() = "This is an OtherClass";
cout << *InfoHolder<int>::getName() << endl;
cout << *InfoHolder<MyClass>::getName() << endl;
cout << *InfoHolder<OtherClass>::getName() << endl;
}