Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带静态模板类成员的模板类:如何定义静态成员_C++_Templates - Fatal编程技术网

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

C++ 带静态模板类成员的模板类:如何定义静态成员,c++,templates,C++,Templates,我有一个模板类,它本身包含一个模板类作为静态成员。我找不到正确的语法来定义静态成员,如示例所示: #include <iostream> #include <list> template <typename B> class Container { std::list<B*> l; public: void add( B* b) { l.push_back(b); } }; templ

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

#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();
}
#包括
#包括
模板
类容器
{
std::列表l;
公众:
无效添加(B*B)
{
l、 推回(b);
}
};
模板
阶级关系
{
公众:
使用RELAIS_TYPE=RELAIS;
静态容器控制;
void Do()
{
续(本);
}
};
//未编译:此处的正确语法是什么。。。?
集装箱运输:续;
int main()
{
relaisr;
r、 Do();
}

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

template<typename Foo>                                                                                                                                                                                  
class Container{};

在我的示例中添加了缺少的代码部分。。。复制粘贴…;)
template < typename A >
Container<typename Relais<A>::RELAIS_TYPE> Relais<A>::cont;
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;
}