文字列入力に基づいて、一連のフィルター関数を使用して適切なルーチンを実行しようとしていました。テンプレートを使用して一般的なケースのマッチャー関数を作成しようとしましたが、特殊な関数(構造体、実際のアプリケーション)へのポインターを格納しようとすると、「タイプがタイプと等しくない」エラーが発生します。
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に置き換えると、同じ例が成功します。