带有静态模板类成员的模板类:如何定义静态成员

时间:2017-05-20 21:00:52

标签: c++ templates

我有一个模板类,它本身包含一个模板类作为静态成员。我无法找到正确的语法来定义静态成员,如示例所示:

#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();
}

1 个答案:

答案 0 :(得分:1)

首先,您的代码未在任何地方定义Container,因此我认为它类似于

template<typename Foo>                                                                                                                                                                                  
class Container{};

有了这个,你可以使用

template < typename A >
Container<typename Relais<A>::RELAIS_TYPE> Relais<A>::cont;

这表示对于模板类型A

  • contRelais<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;
}