【发布时间】:2016-05-20 11:47:27
【问题描述】:
看看下面的代码:
#include <iostream>
template <typename T>
class Foo
{
public:
static T bar;
};
template <typename T> typename T Foo<T>::bar;
int main() {
std::cout << "Foo<int>::bar : " << &Foo<int>::bar << std::endl;
std::cout << "Foo<double>::bar : " << &Foo<double>::bar << std::endl;
return 0;
}
这将打印出 2 个不同的地址。我可以理解为什么在这种情况下,bar 是T 类型,因此Foo<T> 中不同 T 的实例化将为您提供不同的静态成员。但是,如果我们将bar 更改为我们已经知道的类型(例如static int bar)这个still happens。
为什么会这样?为什么不将bar 重新用于多个模板实例化?我如何才能在不同的实例化中只获得 1 个 bar 对象?
【问题讨论】:
标签: c++ templates c++14 static-members