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 *が、yellowColorFunc が宣言されていますconst void *

于 2013-08-06T21:51:43.570 に答える
2

あなたの問題は、関数ポインターを宣言すると、const char *yellowColorFunかかることconst void *です。c++11 が利用可能な場合は、std::function次のように使用できます。
auto colorFunc = std::function<int(const char *,const char *,std::function<Color(const char*)>)>();

関数を などに使用したいというコメントで、その状況ですべきことは、テンプレート化された関数を使用することです.C ++で 's を頻繁にint,float使用したくない.void*

于 2013-08-06T22:00:26.673 に答える