gpt4 book ai didi

c++ - 无法将指向派生类函数的指针传递给基类

转载 作者:搜寻专家 更新时间:2023-10-31 01:55:05 25 4
gpt4 key购买 nike

我试图将派生类中的函数传递给需要函数指针的基类函数,但出现编译器错误。

[BCC32 Error] E2034 Cannot convert 'void (Bar::*)(int)' to 'void (Foo::*)(int)'

我想这是设计好的,但有没有一种解决方法,不涉及令人不快的转换? boost::bind 可以帮助我吗?

#define CALL_MEMBER_FN(object,ptrToMember)  ((object).*(ptrToMember))

class Foo
{
public:
typedef void (Foo::*FFunc)(int i);

void test(FFunc f)
{
CALL_MEMBER_FN(*this,f)(123);
}

void barf1(int i) {};
};

class Bar : public Foo
{
public:
void barf2(int i) {};
};

void ffff()
{
Foo f;
f.test(Foo::barf1); // works

Bar b;
b.test(Bar::barf1); // works
b.test(Bar::barf2); // ERROR
}

作为旁注,我使用虚函数可以很好地工作,这是明显的方法而不是函数指针,但我只是想在稍后尝试一些 boost::bind 技巧之前让它以这种方式工作...

最佳答案

b.test( ( Foo::FFunc )&Bar::barf2 );

抱歉,不是要将其作为答案提交,而是想发表评论。 Sample code .

编辑:好吧,也许这是更“愉快”的转换,因为它是 C++ 风格? Updated sample.

b.test( static_cast< Foo::FFunc >(&Bar::barf2) );

关于c++ - 无法将指向派生类函数的指针传递给基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8803753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com