C ++-将可变参数模板类对象放入向量中

问题描述 投票:0回答:1
class Base
{
public:
    virtual void foo() = 0;
};

class A : public Base
{
public:
    void foo() override { std::cout << "A\n"; }
};

class B : public Base
{
public:
    void foo() override { std::cout << "B\n"; }
};

class Registry
{
public:
    static Registry& instance()
    {
        static Registry s_instance;
        return s_instance;
    }

    void register_foo(Base* foo) 
    { 
        m_vec.emplace_back(foo); 
    }

private:
    std::vector<Base*> m_vec;
};

template<typename ... T>
class Foo : public T...
{
public:
    Foo()
    { 
        Registry::instance().register_foo(this);
    }

    void test() { (T::foo(), ...); }
};

int main()
{
    auto f1 = std::make_unique<Foo<A, B>>();
    auto f2 = std::make_unique<Foo<A>>();

    f1->test();
    f2->test();
}

您可以看到我有一个Base类,A类和B类。

AB继承自Base。类Foo是模板类,带有可变参数模板。这个想法是要能够将A类和B类传递到Foo中。然后将此Foo注册在Registry类中/推入向量中。

问题出在下面-如您所见,我可以同时拥有Foo<A>Foo<A, B>Foo<B, A>。如何获得可以接受所有Foo类型的矢量?

class Base {public:virtual void foo()= 0; }; A类:public Base {public:void foo()覆盖{std :: cout <

A std::vector保存one

类型的对象。您不能将不同类型的对象放入相同的向量(并且从具有不同模板参数的模板创建的对象为不同类型)。
c++ templates variadic-templates multiple-inheritance
1个回答
0
投票

A std::vector保存one

© www.soinside.com 2019 - 2024. All rights reserved.