【发布时间】:2011-11-30 16:43:21
【问题描述】:
我正在编写一个类Base,它的成员函数采用模板参数:
class Base {
template<class T>
void func(const T& t) { ... }
};
有一个类Derived,它在概念上继承了Base 的性质,并具有相同的功能func,但实现不同。
起初我想从Base 派生Derived 并将func 虚拟化,但我不能,因为它是模板。
我也想到了 CRTP,但它是一个选项,因为实例必须能够放入容器中并且可以在不知道它们的确切类型的情况下访问:
std::vector<Base*> v = ...;
v[0]->func(...);
v[1]->func(...);
重载T 的可能类型也不是一种选择。
这种情况的最佳解决方案是什么?
除了主题之外,您会推荐此类问题的参考资料(最好是书籍)吗?
【问题讨论】:
-
你能把整个
Base做成一个模板吗?制作func然后是虚拟的不会有问题。 -
@eran:这会极大地改变语义,目前单个对象可以作为
func成员函数的参数传递给多个类型,如果应用了您提出的更改,您将不得不生成一组单独的对象,每个对象将处理一个类型作为func的参数
标签: c++ templates polymorphism