1

假设我有以下功能

int watchVar(const char* var, const char* descriptor,
            Color (*colorfunc)(const char* var) = yellowColorFunc)

Color yellowColorFunc(const void* var){
    return Color::yellow();
}

我想重载watchVar以接受参数为charintfloat等的函数,但不想为每种类型创建默认颜色函数。

g++ 给出了这个错误:

xpcc::glcd::Color (*)(const char*)' has type 'xpcc::glcd::Color(const void*)

除了声明 colorfunc 来获取 void 指针并强制调用者稍后自己转换参数之外,还有其他方法吗?

谢谢

4

2 回答 2

4

声明了函数指针,const char *但声明了 yellowColorFuncconst void *

于 2013-08-06T21:51:43.570 回答
2

您的问题是您声明一个函数指针采用 aconst char *yellowColorFun采用const void *. 如果 c++11 可用,您可以std::function像这样使用:
auto colorFunc = std::function<int(const char *,const char *,std::function<Color(const char*)>)>();

您在评论中说您想将该函数用于int,float和其他人,在这种情况下您应该做的是使用模板函数,您真的不想void*经常在 c++ 中使用 's。

于 2013-08-06T22:00:26.673 回答