次のように関数シグネチャを検証できます。
template <typename>
struct FnType
{
static bool const valid = false;
};
struct FnType<void(int)>
{
static bool const valid = true;
};
void foo(int)
{
}
FnType<decltype(foo)>::valid; //true
クラスメソッドの署名を確認するにはどうすればよいですか?
class Y
{
public:
void foo(int)
{
}
};
FnType<decltype(&Y::foo)>::valid; //false??
Y::foo
戻り値の型と引数の型が有効であることを確認したい。
メンバー関数ポインターの別の部分的な特殊化を追加できます。例えば
template <typename T>
struct FnType<void(T::*)(int)>
{
static bool const valid = true;
};
その後
FnType<decltype(&Y::foo)>::valid; //true
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加