gpt4 book ai didi

c++ - 重载指向重载函数的指针

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:39 46 4
gpt4 key购买 nike

如果我尝试定义一个指向重载函数的指针

void myprint(int );
void myprint(const char* );
void (*funpointer)(int) = myprint;

编译器理解 funpointer 应该指向与其参数匹配的 myprint 版本。相反,我希望 funpointer 也被重载。
我试着简单地添加几行,比如

void myprint(int );
void myprint(const char* );
void (*funpointer)(int);
void (*funpointer)(const char *);
void funpointer = myprint;

但是随后编译器提示 funpointer 的声明冲突(很明显)。

有没有办法实现我正在寻找的东西?我希望指针表现为重载函数。所以我可以将它称为 funpointer(1)funpointer("Hey.") 并且它可以作为 myprint 的相应版本.

最佳答案

你为什么要这样做?函数指针用于基于应用程序状态的运行时多态性。如果唯一的差异是参数类型,那么普通的旧重载就可以正常工作。

如果您希望能够,比如说编写一个将调用稍后定义的重载的库,在客户端代码中,执行如下操作:

void foo(int x) { printf("int\n");}
void foo(const char* c){ printf("char*\n"); }

template <class T> void callfoo(T t) { foo(t); }

int main(int argc, char* argv[])
{
int x = 3;
callfoo(x);

const char* p = "Hello world";
callfoo(p);

return 0;
}

这允许 lib 为它在链接时才真正意识到的类型调用重载。

关于c++ - 重载指向重载函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7692319/

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