首页 文章

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

提问于
浏览
1

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

#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 回答

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

相关问题