如果我尝试定义一个指向重载函数的指针
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工作。
发布于 2011-10-08 04:39:42
你为什么要这么做?函数指针用于基于应用程序状态的运行时多态性。普通的旧重载在以下情况下工作得很好,唯一的变化是参数类型。
如果您想要能够,例如编写一个库,该库将调用稍后定义的重载,在客户端代码中,执行类似以下操作:
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为它实际上直到链接时才知道的类型调用重载。
发布于 2011-10-08 04:03:53
没办法。在同一个作用域中,不能有两个名称相同的变量。
发布于 2011-10-08 04:12:12
指针是一个类型,它不能被重载。只有函数才能被重载。
在C++中没有办法实现指针的重载。
https://stackoverflow.com/questions/7692319
复制相似问题