Tôi có typename T1
và tôi có gói tham số typename... Variadic
.Cấu trúc chứa bí danh cho loại chuyển đổi đầu tiên của gói có thể biến đổi là
Tôi muốn tạo cấu trúc chứa bí danh sử dụng using Type = ...
cho loại đầu tiên trong gói thông số T1
có thể được chuyển đổi thành. Cho đến nay tôi đã thử như sau:
template<typename T1, typename T2, typename... Variadic>
struct VariadicConvertibleType
{
using Type = std::enable_if<std::is_convertible<T1, T2>::value, T2>::type;
};
Đây có thể là một giải pháp tiềm năng sử dụng SFINAE cho hai loại đầu tiên, nhưng tôi cần phải mở rộng này cho tất cả các loại trong gói sử dụng đệ quy. Tất cả các nỗ lực của tôi đã thất bại cho đến nay, bởi vì bạn không thể đặt điều kiện vào việc sử dụng các khai báo bí danh. Nếu không, điều gì đó tương tự như vậy có thể được sử dụng:
template<typename T1, typename T2, typename... Variadic>
struct VariadicConvertibleType
{
using Type = std::is_convertible<T1, T2>::value ? T2 : VariadicConvertibleType<T1, Variadic...>::Type;
};
Tôi có thể sử dụng mọi thứ (và bao gồm) C++ 14 để triển khai giải pháp. Tôi không thể sử dụng bất cứ điều gì khác hơn là thư viện đứng.
http://en.cppreference.com/w/cpp/types/conditional có thể? Và trường hợp cơ bản nào không có loại tương thích? – LogicStuff