クラスの関数演算子へのポインタへのキャストをオーバーロードするのに苦労しています。コードでは、私が欲しいのはこれです:
typedef int(*funcptrtype)(int);
struct castable {
operator funcptrtype() {return NULL;}
};
を使わずにできるようにしたいですtypedef
。興味があれば、これが必要です。C++11 より前のテンプレート エイリアスが利用できないためです (そのため、typedef
テンプレート化されたコンテキストではこのトリックはオプションではありません...)。
私は通常、これが機能することを期待します:
operator int(*)(int)() {return NULL;}
しかし、そうではありません。コンパイラ (g++ 4.6.1) は次のように述べています。
error: ‘<invalid operator>’ declared as function returning a function
これは機能します:
int (* operator()())(int){return 0;}
しかし、実際にoperator()
は関数ポインターを返すためにオーバーロードしています:)
標準は次のように述べています。
conversion-type-id は、関数型または配列型を表してはなりません
しかし、それは関数ポインタ型とは言いません (最初のコードスニペットはとにかく動作します...)。
誰も正しい構文 w/o を知っていますtypedef
か?