gpt4 book ai didi

c++ - 我可以在 C++ 中使用方法指针,就像在 C# 中使用委托(delegate)一样吗?

转载 作者:太空宇宙 更新时间:2023-11-04 16:20:31 25 4
gpt4 key购买 nike

我想让一个类(为方便起见,我们称它为 X)方法能够使用指向它自己的方法的指针,以便我能够提取仅因调用的方法不同而不同的代码。

例如,有几个像这样的 block :

a();
b();
c();
MehtodCall(someResultOfabc);
d();
e();

我想提取一个只使用作为指针传递的不同方法的方法:

所以我想要类似的东西:

void X::ExtractedMethod( void(X::*MethodCallPointer)(TypeOfABCResult) ){
a();
b();
c();
this->*MethodCallPointer(someResultOfabc);
d();
e();
}

并以这种方式使用这个函数:

void X::DoSomethingA(){
ExtractedMethod(&X::ADoer);
}
void X::DoSomethingB(){
ExtractedMethod(&X::BDoer);
}

操作系统在...

不幸的是,我被困在这里,因为我遇到了一个编译错误,即方法指针未评估为采用一个参数的方法调用。

我开始怀疑原因是否是 X 在此声明中仍是不完整的类型?

如果有人能帮助我告诉我如何做到这一点,或者为什么那不可能,我会很高兴。

我真的、真的不想要的是获得一些解决方法,比如在签名和 lambda 中使用 std::function,或者使用指向采用 X* 并调用我需要的特定方法的静态方法的指针,既不制作 switch 语句和标志,也不代替 switch 语句使用接口(interface),实现策略模式并使用策略的静态实例作为参数;)这些并不是这种情况下的所有解决方法,但我仍然没有想阅读其他解决方法。唯一让我感兴趣的是“这是否可能,以及如何做到这一点”。

最佳答案

@Robert 是对的,在 C++ 中使用委托(delegate)的惯用方法是使用 std::functionstd::bind

但是,如果您坚持使用指向方法的指针作为适当委托(delegate)的变通方法,则正确的语法是:

void X::ExtractedMethod( void(X::*MethodCallPointer)(TypeOfABCResult) ){
(this->*MethodCallPointer)(someResultOfabc);
// ^ ^
// note the parentheses, they are required

关于c++ - 我可以在 C++ 中使用方法指针,就像在 C# 中使用委托(delegate)一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17248574/

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