C++静态模板成员,每个模板类型一个实例?

use*_*137 12 c++ static templates member

通常,对于具有静态成员/对象的类的每个实例,一个类的静态成员/对象是相同的.无论如何,如果静态对象是模板类的一部分,还取决于模板参数?例如,像这样:

template<class T>
class A{
public:
  static myObject<T> obj;
}
Run Code Online (Sandbox Code Playgroud)

如果我将A的一个对象int和另一个对象构建为float,我想obj每种类型会有两个,一个?

如果我创建A的多个对象作为类型int和多个floats,它仍然是两个obj实例,因为我只使用两种不同的类型?

Yac*_*oby 20

每个不同的模板初始化的静态成员是不同的.这是因为每个模板初始化都是由编译器在第一次遇到模板的特定初始化时生成的不同类.

此代码显示静态成员变量不同的事实:

#include <iostream>

template <class T> class Foo {
  public:
    static int bar;
};

template <class T>
int Foo<T>::bar;

int main(int argc, char* argv[]) {
  Foo<int>::bar = 1;
  Foo<char>::bar = 2;

  std::cout << Foo<int>::bar  << "," << Foo<char>::bar;
}
Run Code Online (Sandbox Code Playgroud)

结果如何

1,2
Run Code Online (Sandbox Code Playgroud)


vil*_*pam 5

A<int>并且A<float>是两种完全不同的类型,您不能安全地在它们之间进行转换。的两个实例A<int>将共享相同的静态 myObject。