C++ 在运行时获取/设置模板结构的静态成员
我试图在运行时存储关于一个具有静态成员的模板结构的类的信息,但是如果没有错误,我无法获取或设置静态成员 为什么这个代码不起作用C++ 在运行时获取/设置模板结构的静态成员,c++,templates,static,C++,Templates,Static,我试图在运行时存储关于一个具有静态成员的模板结构的类的信息,但是如果没有错误,我无法获取或设置静态成员 为什么这个代码不起作用 template <typename T> struct InfoHolder { static const char* name; }; int main() { InfoHolder<int>::name = "This is an integer"; cout << InfoHolder<
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;
}
模板
结构信息持有者
{
静态常量字符*名称;
};
int main()
{
InfoHolder::name=“这是一个整数”;
如果出现链接器错误,则无法执行。必须在某个位置定义name
变量。(在类中声明它不会在任何位置分配它,因为它不是对象的一部分)
在课程结束后,在main之前写下:
template <typename T>
const char *InfoHolder<T>::name;
模板
const char*InfoHolder::name;
这对静态数据成员来说是一个小小的不便。我看到它在其他地方被使用
由于未分配结构中的静态成员,因此我可以使用函数中的静态成员,并返回变量指针
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;
}
模板
结构信息持有者
{
静态常量字符**getName()
{
静态常量字符*名称;
返回&名称;
}
};
int main()
{
*InfoHolder::getName()=“这是一个整数”;
*InfoHolder::getName()=“这是一个MyClass”;
*InfoHolder::getName()=“这是另一个类”;
库特