【发布时间】:2017-03-14 19:45:45
【问题描述】:
我有一个看起来像这样的“包装”模板:
template <typename T>
class Wrapper {
virtual T* get() = 0;
}
那么我有以下继承方案:
class A {
// things
}
class B : public A {
// more things
}
我有另一个使用该包装器的类:
class Worker {
void work(Wrapper<A>* wa){
A* a = wa->get();
//do stuff with a.
}
}
所有可以用A* 完成的事情,都可以用B* 完成,但我不能将Wrapper<B>* 作为Wrapper<A>* 传递给Worker。有没有办法允许这样做?
我已经阅读了有关 C++ 概念的信息,但我不知道它们如何解决问题。
【问题讨论】:
-
您可以尝试从
std::shared_ptr获得一些见解。如果您可以按值传递包装器,则可以从wrapper<B>构造wrapper<A>。看看en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr,第 9 点。
标签: c++ templates inheritance wrapper covariance