C++:如何在没有模板参数的情况下访问模板化类的静态成员

我有这个代码:

#include <iostream>

template <typename T>
class Test {
public:

    // Some code...

    static int member;
};

int main()
{
    std::cout << Test::member;
}

这当然不起作用,因为倒数第二行缺少Test.
但由于member不依赖于T,我想在不提供模板参数的情况下使其可访问。

有什么方法可以做到吗?

回答

如果您在类模板中声明一个静态成员Test,那么每个特化(Test模板生成的具体类型)都有一个单独的静态成员副本。也就是说,Test<int>::member是一个不同的对象Test<char>::member等等。这就是为什么您需要指定您指的是哪一个。

为确保member所有特化之间只有一个shared副本Test,您可以移动member到非模板基类:

struct TestBase {
    static int member;
}

template <typename T>
class Test : public TestBase {
    // ...
};

int main() {
    // do something with TestBase::member
}


回答

没有一个,而是许多名为member. Test::member指的是哪一个?没有意义,所以不允许。

Test<int>::member = 42;
Test<short>::member = 13;

std::cout << Test::member << 'n';  // what should this print?


以上是C++:如何在没有模板参数的情况下访问模板化类的静态成员的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>