假设我有两个模板化类,一个是纯虚拟父类,另一个是从父类继承的。两者都被模板化为采用泛型类型和仿函数。例如:
template<typename T, typename funct>
class pure_virtual{
//pure virtual members
}
template<typename T, typename funct>
class child : public pure_virtual{
//members
}
在我的 main 中,我想创建一个指向我的子类的 pure_virtual 指针,而不使用动态内存。例如:
int main(){
pure_virtual<int*,my_functor>* p;
child<int*,my_functor> c(my_functor);
p = &c;
return 0;
}
这个实现给了我一个编译错误,指出它无法将类型 child 转换为类型 pure_virtual。知道我在这里做错了什么吗?我知道如果我使用动态分配,这会起作用;但是,如果可能的话,我真的想避免它。
谢谢
最佳答案
你已经成为令人烦恼的解析的受害者。 child<int*,my_functor> c(my_functor)
没有声明child<int*,my_functor>
对象,而是声明一个采用 my_functor
的函数并返回 child<int*,my_functor>
.
这样的函数无法转换为 pure_virtual<int*,my_functor>*
.
要解决此问题,请将该行更改为:
child<int*,my_functor> c((my_functor()));
关于c++ - 多态基类指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15037340/