在运行时获取/设置模板结构的静态成员

Getting / Setting static members of a template struct during runtime

本文关键字:结构 静态成员 设置 运行时 获取      更新时间:2023-10-16

我正在尝试在运行时使用具有静态成员的模板结构存储有关类的信息,但是我无法在没有错误的情况下获取或设置静态成员。

为什么这段代码不起作用?

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;
}