我有一个模板类,它本身包含一个模板类作为静态成员。我无法找到正确的语法来定义静态成员,如示例所示:
#include <iostream>
#include <list>
template <typename B>
class Container
{
std::list<B*> l;
public:
void add( B* b)
{
l.push_back(b);
}
};
template < typename A >
class Relais
{
public:
using RELAIS_TYPE = Relais<A>;
static Container<RELAIS_TYPE> cont;
void Do()
{
cont.add(this);
}
};
// did not compile: Which is the correct syntax here...?
Container<Relais<int>> Relais<int>::cont;
int main()
{
Relais<int> r;
r.Do();
}
答案 0 :(得分:1)
首先,您的代码未在任何地方定义Container
,因此我认为它类似于
template<typename Foo>
class Container{};
有了这个,你可以使用
template < typename A >
Container<typename Relais<A>::RELAIS_TYPE> Relais<A>::cont;
这表示对于模板类型A
cont
是Relais<A>
其类型为Container<typename Relais<A>::RELAIS_TYPE>
。
完整(建筑)代码:
template<typename Foo>
class Container{};
template < typename A >
class Relais
{
public:
using RELAIS_TYPE = Relais<A>;
static Container<RELAIS_TYPE> cont;
void Do()
{
cont.add(this);
}
};
template < typename A >
Container<typename Relais<A>::RELAIS_TYPE> Relais<A>::cont;
int main()
{
Relais<int> r;
}