首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重载指向重载函数的指针

重载指向重载函数的指针
EN

Stack Overflow用户
提问于 2011-10-08 04:01:37
回答 5查看 442关注 0票数 2

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

代码语言:javascript
复制
void myprint(int );
void myprint(const char* );
void (*funpointer)(int) = myprint;

编译器知道funpointer应该指向与其参数匹配的myprint版本。相反,我希望funpointer也是重载的。

我尝试简单地添加几行代码,如下所示

代码语言:javascript
复制
void myprint(int );
void myprint(const char* );
void (*funpointer)(int);
void (*funpointer)(const char *);
void funpointer = myprint;

但是编译器会抱怨funpointer的声明冲突(很明显)。

有没有办法实现我想要的东西?我希望指针表现为一个重载函数。因此,我可以将其称为funpointer(1)funpointer("Hey."),它将作为相应版本的myprint工作。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-10-08 04:39:42

你为什么要这么做?函数指针用于基于应用程序状态的运行时多态性。普通的旧重载在以下情况下工作得很好,唯一的变化是参数类型。

如果您想要能够,例如编写一个库,该库将调用稍后定义的重载,在客户端代码中,执行类似以下操作:

代码语言:javascript
复制
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为它实际上直到链接时才知道的类型调用重载。

票数 2
EN

Stack Overflow用户

发布于 2011-10-08 04:03:53

没办法。在同一个作用域中,不能有两个名称相同的变量。

票数 2
EN

Stack Overflow用户

发布于 2011-10-08 04:12:12

指针是一个类型,它不能被重载。只有函数才能被重载。

在C++中没有办法实现指针的重载。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7692319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档