1

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

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に置き換えると、同じ例が成功します。

4

1 に答える 1

2

テンプレート値パラメータとしての文字列は、ISO標準で禁止されています。

于 2009-06-26T20:12:34.777 に答える