我想从我可以使用模板参数构建的列表中找到类型。在这个例子中:
using my_type = typename get_constructible<char *, int, std::string>::type;
my_type
必须为std::string
,因为在std::string
列表中,第一个可以使用char *
构建。
我试过了:
#include <string>
#include <utility>
template<typename T, typename... Rest>
struct get_constructible
{
using type = void;
};
template<typename T, typename First, typename... Rest>
struct get_constructible<T, First, Rest...>
{
using type = typename std::conditional<
std::is_constructible<First, T>::value,
First,
get_constructible<T, Rest...>::type
>::type;
};
int main(void)
{
using my_type = get_constructible<char *, int, std::string>::type;
my_type s("Hi!");
}
我不明白我的逻辑失败了。
答案 0 :(得分:7)
您的逻辑看起来不错,但您在依赖名称typename
上错过了get_constructible<T, Rest...>::type
:
using type = typename std::conditional<
std::is_constructible<First, T>::value,
First,
typename get_constructible<T, Rest...>::type
//^^^^^^^^
>::type;