假设我有以下功能
int watchVar(const char* var, const char* descriptor,
Color (*colorfunc)(const char* var) = yellowColorFunc)
带
Color yellowColorFunc(const void* var){
return Color::yellow();
}
我想重载watchVar
以接受参数为char
,int
,float
等的函数,但不想为每个函数创建默认颜色函数类型。
g ++给出了这个错误:
xpcc::glcd::Color (*)(const char*)' has type 'xpcc::glcd::Color(const void*)
除了声明colorfunc以获取空指针并强制调用者稍后自己投射参数之外,还有另一种方法吗?
由于
答案 0 :(得分:4)
函数指针声明为const char *
,但声明了yellowColorFunc const void *
答案 1 :(得分:2)
您的问题是,声明一个const 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 ++编写。