是否可以通过模板实现类似于下面的伪代码?如果是这样,在这里获得正确的编译时多态性的正确方法是什么?谢谢!
class Base {virtual void DoSomething();};
class Derived:public Base{void DoSomething();};
class Derived1:public Base{void DoSomething();};
class Derived2... etc.
std::vector<Base*> bases;
bases.push_back(new Derived());
bases.push_back(new Derived1());
etc...
bases[i]->DoSomething();
编辑
由于上述内容引起了一些混乱,我想我应该添加一个我刚刚发现的建议的起始解决方案的示例,该解决方案是针对与我自己的问题类似的问题给出的。这是从 2001 年的旧澳大利亚 linux c++ 板中提取的 http://lists.linux.org.au/archives/tuxcpprogramming/2001-August/000135.html:
squareTy square;
twiceTy twice;
thriceTy thrice;
functionBaseTy* fns[] = { &square, &twice, &thrice };
template <class T, int N>
inline
void my_algorithm(T* functions[N])
{
// This deduces T and the array size N
my_real_algorithm(functions, N);
}
template <class T> // not inline
void my_real_algorithm(T* functions, int n)
{
// Loop here ...
}