後で呼び出すためにstd::function
を格納するテンプレートクラスを作成しています。ここでは簡体コードは次のとおりです。enable_ifを使用したテンプレートメソッドの特殊化
template <typename T>
struct Test
{
void call(T type)
{
function(type);
}
std::function<void(T)> function;
};
問題が
void call(void type)
が未定義となるため、このテンプレートはvoid
タイプ用にコンパイルしないということです。
template <>
void Test<void>::call(void)
{
function();
}
はまだcall(T Type)
の宣言と互換性がないためvoid
タイプのためにそれを専門
は、問題を軽減しません。
ので、C++ 11の新機能を使用して、私はstd::enable_if
みました:
typename std::enable_if_t<std::is_void_v<T>, void> call()
{
function();
}
typename std::enable_if_t<!std::is_void_v<T>, void> call(T type)
{
function(type);
}
をしかしそれは、Visual Studioでコンパイルされません。
エラーC2039: 'type' を:ではありません'std :: enable_if'のメンバー
この問題にどのように対処しますか?
SFINAEは*推定値*テンプレートパラメータに対してのみ機能します。 –