#include <string>
#include <variant>
int main()
{
using variant_base = std::variant< int, double >;
using variant_derived_and_flattened = std::variant< std::string, variant_base >;
// the above does not produce the desired
// std::variant< int, double, std::string >
static_assert( std::is_same< variant_base, variant_derived_and_flattened >{} );
}
Run Code Online (Sandbox Code Playgroud)
static_assert 失败。
我认为没有办法做到这一点,并希望对此进行确认,但也许有人知道如何做到这一点?
您可以创建一个元函数来转换变体类型。
template <class V, class T> struct variant_append_helper;
template <class... A, class T>
struct variant_append_helper<std::variant<A...>, T> {
using type = std::variant<A..., T>;
};
template <class V, class T>
using variant_append = typename variant_append_helper<V, T>::type;
static_assert(std::is_same<std::variant<int, double, std::string>,
variant_append<std::variant<int, double>, std::string>>{});
Run Code Online (Sandbox Code Playgroud)