class A {
int f(int x, int j) { return 2;}
decltype(f)* p;
};
エラーが発生します:
error: decltype cannot resolve address of overloaded function
そのエラーがオーバーロードされた関数についてさえ話している理由が理解できません。同様に、関数にアクセスするにはスコープ演算子を使用する必要があるかもしれないと思いました。
class A {
int f(int x, int j) { return 2;}
decltype(A::f)* p;
};
それでもエラーが発生しますが、説明が明確になります。
error: invalid use of non-static member function 'int A::f(int, int)'
decltypeを使用してメンバー関数の型を見つけることが許可されていないのはなぜですか?または、メンバー関数を設定してstatic
、いずれの場合もエラーを削除します。
あなたが本当に欲しいのは:
struct a {
int f(int x, int j) { return 2;}
decltype(&a::f) p;
};
f
あなたが参照しているのはメンバー関数なので。推定されるタイプは次のとおりです。
int(a::*)(int, int)
&
コンパイラがないと、コンパイラは、引数を指定せずに関数を呼び出そうとしていると想定します。おそらく、Clangのエラーメッセージはこれについてより明確です:
error: call to non-static member function without an object argument decltype(a::f) p;
ポインタ型が本当に必要ない場合は、後でstd::remove_pointer_t
から適用できます<type_traits>
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加