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>::memberTest<char>::member是不同的对象等等。这就是为什么你需要指定你的意思。

为了确保所有Test专业化之间只有一个member的共享副本,您可以将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?

您可以给Test一个默认值作为模板参数,如

template <typename T = void>
class Test {

然后你可以访问像这样的会员

std::cout << Test<>::member;

但CCD_ 14在肠道内是无法清除的。

相关内容

最新更新