在运行时获取/设置模板结构的静态成员
Getting / Setting static members of a template struct during runtime
我正在尝试在运行时使用具有静态成员的模板结构存储有关类的信息,但是我无法在没有错误的情况下获取或设置静态成员。
为什么这段代码不起作用?
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;
}
如果遇到链接器错误。您必须在某处定义name
变量。(在类中声明它不会在任何地方分配它,因为它不是对象的一部分)
在类之后和主课之前写下这个:
template <typename T>
const char *InfoHolder<T>::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;
}
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 如何在C++中定义静态成员结构
- C++标准是否定义了结构中成员函数的函数内定义是否必须具有静态链接?
- 结构内部的结构:"对非静态成员的非法引用"错误
- 指向结构中作为静态成员的函数的指针
- constexpr静态结构类成员的声明冲突
- 有没有办法将数组行为作为静态结构数据成员?
- 在运行时获取/设置模板结构的静态成员
- C++静态结构类型成员初始化
- 静态调度以使用聚合类型的层次结构更正成员方法
- 在cuda中使用静态成员函数模板结构的另一种方法
- 类内定义的静态结构的静态成员的编译时默认值
- 如何保证模板化结构中 const 静态成员的初始化顺序
- 我可以在没有任何前向声明的类/结构上访问静态成员函数吗?
- 嵌套结构:在定义结构指针时使用了无效的非静态成员
- 被视为依赖作用域的函数模板的函数作用域结构体的静态成员函数
- 在.cpp文件中定义需要访问私有结构的静态成员
- 如何从另一个类的结构中引用静态成员变量
- 具有静态成员的静态结构
- 为什么我不能在VS2008的类中使用静态成员,例如静态结构?