У меня есть шаблон класса, C_Foo , который специализируется на нескольких направлениях.
struct Bar_Base { ... };
struct Bar_1 : public Bar_Base { ... };
struct Bar_2 : public Bar_Base { ... };
struct Bar_3 : public Bar_Base { ... };
class C_Foo<T> { ... };
class C_Foo_1 : public C_Foo<Bar_1> { ... };
class C_Foo_2 : public C_Foo<Bar_2> { ... };
class C_Foo_3 : public C_Foo<Bar_3> { ... };
И следующие экземпляры:
C_Foo_1 foo1;
C_Foo_2 foo2;
C_Foo_3 foo3;
У меня есть набор общих операций, все из которых определены в C_Foo, которые я хочу выполнить на foo1, foo2 и foo3. Я пробовал следующее:
vector<C_Foo *> v;
v.push_back(&foo1);
v.push_back(&foo2);
v.push_back(&foo3);
Но я получаю ошибки компиляции, предположительно потому, что компилятор не уверен, как перейти от C_Foo_1 к C_Foo.
Возможно ли сделать что-то подобное? Я хочу иметь возможность циклически проходить через foo1 .. fooN и выполнять одни и те же операции со всеми из них, без необходимости копировать и вставлять шаблонный код, например, так:
foo1.do_stuff();
foo2.do_stuff();
foo3.do_stuff();
Спасибо за вашу помощь.