gpt4 book ai didi

c++ - 测试 std::common_type 是否存在

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:18:51 25 4
gpt4 key购买 nike

我想编写一个辅助模板来检查模板参数包是否具有通用类型,即,是否将 std::common_type 应用于包定义了一个类型。

使用 std::void_t在 SFINAE 中,我得出了以下定义:

template<typename... Types, typename Enable = void>
struct has_common_type : std::false_type
{ };

template<typename... Types>
struct has_common_type<Types..., std::void_t<std::common_type<Types...>::type>> : std::true_type
{ };

但这不起作用,因为模板参数包必须是最后一个参数。编译器引发以下错误:

error: template parameter pack must be the last template parameter
template<typename... Types, typename Enable = void>

如何定义这样一个模板?

最佳答案

选项#1

template <typename... Ts>
using has_common_type = std::experimental::is_detected<std::common_type_t, Ts...>;

DEMO


选项#2

template <typename AlwaysVoid, typename... Ts>
struct has_common_type_impl : std::false_type {};

template <typename... Ts>
struct has_common_type_impl<std::void_t<std::common_type_t<Ts...>>, Ts...> : std::true_type {};

template <typename... Ts>
using has_common_type = typename has_common_type_impl<void, Ts...>::type;

DEMO 2

关于c++ - 测试 std::common_type 是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42748199/

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