1

我试图在运行时使用带有静态成员的模板结构存储有关类的信息,但是我无法获取或设置静态成员而不会出现错误。

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

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

2 回答 2

2

如果您收到链接器错误。您必须在name某处定义变量。(在类中声明它不会在任何地方分配它,因为它不是对象的一部分)

在课后和 main 之前写下:

template <typename T>
const char *InfoHolder<T>::name;

这是静态数据成员的一个小不便。

于 2012-11-20T00:22:53.240 回答
0

我看到它在其他地方被使用;

由于未分配结构中的静态成员,因此我可以使用函数中的静态成员,并返回变量的指针。

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;
}
于 2012-11-20T00:28:04.130 回答