如何初始化静态模板化容器?

jok*_*aut 7 c++ static templates nested class

我试图找出初始化模板值为私有内部类的静态容器变量的正确方法.这是一个玩具的例子

#include <vector>

using namespace std;

template <class myType>
class Foo {
private:
    class Bar {
        int x;
    };

    static vector<Bar*> bars;
};

template <class myType>
vector<Bar*> Foo<myType>::bars; // error C2065: 'Bar' : undeclared identifier
Run Code Online (Sandbox Code Playgroud)

我也试过了

...

template <class myType>
vector<Foo<myType>::Bar*> Foo<myType>::bars; // error C2059: syntax error : '>'
Run Code Online (Sandbox Code Playgroud)

它是有效的,如果在设计class Bar之外声明,class Foo但从设计的角度来看,这是一个丑陋的解决方案.有什么建议?

仅供参考,一切都在.h文件中声明.

Don*_*alo 10

试试这个:

template <class myType>
vector<typename Foo<myType>::Bar*> Foo<myType>::bars;
Run Code Online (Sandbox Code Playgroud)

  • 是的,也打败了我.规则是,在A :: B之前使用关键字`typename`,只要它应该是一个类型而表达式A涉及一个模板参数. (2认同)