![](/img/trans.png)
[英]Using enable_if, in class template method, to check if two function arguments arguments are both std::array or both std::vector
[英]Using std::enable if for template with 3 generic arguments
我已經找到了一些關於std::enable_if
主題的線程,但是不幸的是,我無法將示例應用於我的代碼。
template<class From, class To, class Value>
struct convert
{
static Value apply(Value value)
{
return value;
}
};
我希望僅當“ From
和“ To
”相同時才啟用此功能,因此我嘗試使用
std::enable_if<std::is_same<From,To>::value>::Value
但這是行不通的。 我該怎么做?
我也有這兩個專業,可以讓您更好地了解我的問題:
template<class From, class Value>
struct convert<From, kilometer, Value>
{
static Value apply(Value value)
{
doSomething;
}
};
template<class To, class Value>
struct convertImpl <kilometer, To, Value>
{
static Value apply(Value value)
{
doSomethingElse;
}
};
這就是我的肥胖問題的根源。 現在,我正在靜態聲明From
和To
相同的情況,從而使代碼得以編譯。 但是我只想在兩個類型相同時返回該值。
我認為您不需要SFINAE,從您的描述中,我認為您只想要專業化:
template<class From, class To, class Value>
struct convert
{
static Value apply(Value value)
{
Value somethingElse = ...;
return somethingElse;
}
};
template<class From, class Value>
struct convert<From,From,Value>
{
static Value apply(Value value)
{
return value; // SAME
}
};
我承認我真的沒有看到這種意義,因為Value
是From
和To
的獨立類型,但是您可能對此有些了解,但我不知道。 如果您希望完整的結構專業化,這似乎是您的願望。 現場觀看 。
祝你好運
template<class From, class To, class Value>
struct convert
{
template <typename F = From, typename T = To>
static auto apply(Value value) -> typename std::enable_if<std::is_same<F,T>::value, Value>::type
{
static_assert(std::is_same<F, From>::value && std::is_same<T, To>::value, "");
// no conversion
return value;
}
template <typename F = From, typename T = To>
static auto apply(Value value) -> typename std::enable_if<!std::is_same<F,T>::value, Value>::type
{
static_assert(std::is_same<F, From>::value && std::is_same<T, To>::value, "");
// do conversion
return value;
}
};
另外,也可以使用基於標簽的調度來實現:
template<class From, class To, class Value>
struct convert
{
static Value apply(Value value)
{
using tag = std::integral_constant<bool, std::is_same<From, To>::value>;
return _apply(value, tag{});
}
private:
static Value _apply(Value value, std::true_type)
{
// no conversion
return value;
}
static Value _apply(Value value, std::false_type)
{
// do conversion
return value;
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.