A std::vector
保存one
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
类。
A
和B
继承自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
A std::vector
保存one