我有下面的代碼不能編譯。帶接口對象的C++模板
class Base {
public:
virtual ~Base() { };
};
class Derived : public Base { };
class NotDerived { };
template <typename T>
class Group { };
int main() {
Group<Base> *g = NULL;
g = new Group<Base>(); // Works
g = new Group<Derived>(); // Error, but I want it to work
g = new Group<NotDerived>(); // Error, as expected
}
我明白,這不能編譯,因爲g
是不同的類型Group<Derived>
。爲了在Java中完成這項工作,我會做一些事情,例如Group<? extends Base> g
,但據我所知C++沒有那個關鍵字。可以做什麼?
編輯:我想澄清一下,我不希望它有可能將Base
的類型設置爲g
。我已經更新了我的例子來解釋這一點。
編輯2:我的問題有兩種解決方案。 Dave's我發現很簡單,很容易定義。但Bowie's(加上Mark's)更適合我的需求。
我不熟悉Java是如何工作的。你想用這種語法說什麼? –
這在Java中也不起作用。 '<?的語法擴展...>不是爲了支持協方差,而是在那裏爲泛型可能使用的類型添加約束。 –
請參閱[C++模板多態性](http://stackoverflow.com/questions/2203388/c-templates-polymorphism) – Praetorian