c++ - 多态基类指针

标签 c++ templates polymorphism

假设我有两个模板化类,一个是纯虚拟父类,另一个是从父类继承的。两者都被模板化为采用泛型类型和仿函数。例如:

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/

相关文章:

c++ - 我可以使用覆盖非虚拟方法的方法吗?

c++ - 在 C++ 中拆分字符串需要帮助

c++ - parallel_for_each 上下文中的数组复制

c++ - 构造函数成员初始化列表解释

c++ - 类模板中静态数据的初始化顺序

c++ - 是 T Min(T, T);总是比 const T& Min(const T&, const T&) 好;如果 sizeof(T) <= sizeof(void*)?

c++ - 传递绝对文件名以在c++中读取文件

c++ - SFINAE 的问题

c++ - 绘图对象 - 更好的类设计?

java - 在这个多态性练习中,我如何计算由一系列节点表示的方程式?