我有typename T1
,我有一個參數包typename... Variadic
。包含替代包的第一個可轉換類型的別名的結構
我想創建一個結構,其中包含一個使用別名using Type = ...
的第一個類型的參數包,T1
可以轉換成。到目前爲止,我已經試過如下:
template<typename T1, typename T2, typename... Variadic>
struct VariadicConvertibleType
{
using Type = std::enable_if<std::is_convertible<T1, T2>::value, T2>::type;
};
這可能是使用SFINAE對於前兩類潛在的解決方案,但我需要將此擴大到所有的包使用遞歸的類型。到目前爲止,我所有的嘗試都失敗了,因爲您不能將條件放入使用別名聲明中。否則,類似這樣的東西可以用來:
template<typename T1, typename T2, typename... Variadic>
struct VariadicConvertibleType
{
using Type = std::is_convertible<T1, T2>::value ? T2 : VariadicConvertibleType<T1, Variadic...>::Type;
};
我可以用一切高達(包括)C++ 14實施解決方案。儘管如此,我不能使用其他任何東西。
http://en.cppreference.com/w/cpp/types/conditional也許?什麼應該是沒有兼容類型的基本情況? – LogicStuff