私は、文字列入力に基づいて適切なルーチンを実行するために一連のフィルタ関数を使用しようとしていました。テンプレートを使用して一般的なケースのためのマッチャー関数を作成しようとしましたが、実際のアプリケーションの構造内で特殊な関数へのポインターを格納しようとすると "タイプがタイプに一致しません"というエラーが発生しました文字列に特化したテンプレート関数へのポインタを取る方法は?
Distilled例のVisual C++ 8 'コンソールアプリケーションの
template <const char *C>
const char*
f(void) {
return C;
}
const char* (*g)(void) = f<"hi">;
int _tmain(int argc, _TCHAR* argv[])
{
return g();
}
からこれはエラー
Error 1 error C2440: 'initializing' : cannot convert from 'const char *(__cdecl *)(void)' to 'const char *(__cdecl *)(void)' c:\files\pointer.cpp 7
で失敗し(それはまた、メインの戻り値の誤差を持っているが、それはここで私には関係しません。 )
const char *
がintに置き換えられた場合、同じ例が続きます。
char gs [] = "hi";を実行するとコンパイルできることが分かりますか? const char *(* g)(void)= f; –
名前付き変数の使用に関する参照が見つかりましたが、それは私が行っている簡潔なテーブルを破壊します。文字列をテーブルに追加して関数に渡す方がよいでしょう。実際には、私はちょうどパントし、if/elseチェーンを使用しました。 –