【问题标题】:template class with static template class member: how to define the static member带有静态模板类成员的模板类:如何定义静态成员
【发布时间】:2017-10-20 19:21:29
【问题描述】:

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

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

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

    首先,您的代码没有在任何地方定义 Container,所以我假设它类似于

    template<typename Foo>                                                                                                                                                                                  
    class Container{};
    

    有了它,你可以使用

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

    这表示模板类型A

    • contRelais&lt;A&gt; 的成员

    • 它的类型是Container&lt;typename Relais&lt;A&gt;::RELAIS_TYPE&gt;


    完整(建筑)代码:

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

    【讨论】:

    • 在我的示例中添加了缺少的代码部分...复制粘贴...;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多