通过基指针获取派生类
getting derived class by base pointer?
当我的对象在堆上而不是在堆栈上声明时,我可以发誓这是有效的。我有一个函数,它接受一个指向基类的指针(detail::DuplicateFn)。-虽然这是一个虚拟类,但实际指针是由派生类(即detail::SkipFn)给出的
1>GMProject.cpp(298): error C2664:
'void xml_tree<V>::combine_if<bool(__cdecl *)(const T &,const T &)>(const xml_tree<V> &,Predicate,const detail::DuplicateFn *)' :
cannot convert parameter 3 from 'detail::SkipFn (__cdecl *)(void)' to 'const detail::DuplicateFn *'
我的函数:
void GMProject::CombineTree(const pTree& Other) {
detail::SkipFn foo();
ProjectTree.combine_if(Other, &SimilarTreeValue<GMProject::pTree>, &foo);
}
其中ProjectTree.combine_if()作为第三个参数需要一个指向"DuplicateFn"的指针-并且SkipFn派生自DuplicateFn。
如上所述,如果我在堆上声明"foo",这将正确工作(像我期望的那样)。然而,当在堆栈上声明foo(或最终使foo成为临时变量)时,它不会这样做。为什么呢?
detail::SkipFn foo();
foo
不是对象。它是一个返回类型为detail::SkipFn
的函数。所以,试试-
detail::SkipFn foo; // Notice the removal of (). Google most vexing parse
// for explanation.
List x;and List x();?
相关文章:
- 派生类如何获取基的成员?
- 如何在新的派生对象中获取基本对象的数据?
- 获取我的基类以递增派生类对象整数
- 从组件的 std::type_index 获取派生最多的类型
- C++ 如何使派生类自动获取基类参数
- 获取指向派生类的指针在 C++ 中以运行时异常结束
- 通过基类指针获取派生类对象的引用
- 如何使用派生类在 c++ 中的方法之一获取派生类的名称
- 不能从派生类中获取基类的成员. C++
- 从派生类 c++ 中获取变量
- 获取派生模板实例化的运行时类型
- 从基类对象的向量中获取特定派生类的对象
- (重复)C++类集/从基类和派生类获取
- 如何在 C++ 中从派生类中获取值
- 如果不在派生类实现中执行此操作,"basic_streambuf"是否会创建自己的获取/放置区域?
- 获取具有基类函数的派生类
- 从基类指针获取模板派生类的值
- 在C++中,是否允许将函数指针强制转换为将指向基类或派生类的指针作为参数获取的函数指针
- 为什么基类型指针不能获取派生类对象的地址值?
- 当可能的许多派生类型时,从基本类型的实例中获取派生类型