gpt4 book ai didi

c++ - 如果其中一种变体类型,如何启用模板功能?

转载 作者:搜寻专家 更新时间:2023-10-30 23:51:08 24 4
gpt4 key购买 nike

我有一些变体 using V = std::variant<A, B, C>和一些功能 foo与原型(prototype) void foo(const T&) .

想要我的功能foo成为std::enable_if ed 如果是 V 之一的类型被传递(没有明确指出)。

我的 V将及时获得越来越多的类型,因此,解决方案如

template<class T,
typename std::enable_if<
std::is_same_v<T, A> || std::is_same_v<T, B> || std::is_same_v<T, C>,
int>::type = 0>
void foo(const T&);

Not Acceptable 。

Here是一种升压解决方案。

是否可以实现 std::variant 的逻辑? ?

理想情况下,类型特征应类似于 is_one_of_variants_types<V, T> .

最佳答案

template <typename, typename>
constexpr bool is_one_of_variants_types = false;

template <typename... Ts, typename T>
constexpr bool is_one_of_variants_types<std::variant<Ts...>, T>
= (std::is_same_v<T, Ts> || ...);

template <typename T>
auto foo(const T&)
-> std::enable_if_t<is_one_of_variants_types<V, T>>;

DEMO

关于c++ - 如果其中一种变体类型,如何启用模板功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57639431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com