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

时间:2012-11-20 00:13:16

标签: c++ templates static

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

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

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

2 个答案:

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