繁体   English   中英

通过基指针获取派生类?

[英]getting derived class by base pointer?

当我的对象在堆上而不是在堆栈上声明时,我本可以宣誓就这样工作了。 我有一个函数,该函数需要一个指向基类的指针(detail :: DuplicateFn)。 -尽管这是一个虚拟类,但实际的指针是由派生类给出的(即dteail :: 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时(或-ultimatelly-使foo成为临时变量)则没有。 这是为什么?

detail::SkipFn foo();

foo不是对象。 这个函数的返回类型为detail::SkipFn 因此,请尝试-

detail::SkipFn foo;   // Notice the removal of (). Google most vexing parse 
                      // for explanation.

List x之间有什么区别吗? 并列出x();?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM