gpt4 book ai didi

c++11 - 如何获取类的方法指针,以及该方法的多个实现?

转载 作者:行者123 更新时间:2023-12-03 08:09:35 26 4
gpt4 key购买 nike

#include <cstdio>

struct A {
void foo(int) { printf("this is the wrong function\n"); }
void foo() { printf("this is the right function\n"); }
};

int main() {
auto method = &A::foo; // c++ why don't you me allow to give argument types?

A a;
(a.*method)();
}

我知道这个小示例只需将 auto 替换为显式类型就可以正常工作,但这不是我要找的。我想在等号的右边告诉c++,我想要哪个方法。

最佳答案

除非您通过显式编写其原型(prototype)来指定您感兴趣的重载,否则编译器无法猜测您指的是哪个方法。您可以通过显式输入变量来做到这一点,就像您说的那样:

void (A::*foo)() = &A::foo;
void (A::*fooInt)(int) = &A::foo;

或者您可以在初始化的右侧使用强制转换:

auto foo = static_cast<void (A::*)()>(&A::foo);
auto fooInt = static_cast<void (A::*)(int)>(&A::foo);

关于c++11 - 如何获取类的方法指针,以及该方法的多个实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29952826/

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