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

template class with static template class member: how to define the static member

本文关键字:定义 静态成员 何定义 静态 成员      更新时间:2023-10-16

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

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

首先,您的代码不会在任何地方定义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;
}