gpt4 book ai didi

c++ - 如何在可变参数包中找到 "min"类型?

转载 作者:搜寻专家 更新时间:2023-10-31 00:35:25 25 4
gpt4 key购买 nike

“最小”类型是指根据编译时函数比较小于的类型,例如sizeof

我有一个 draft implementation , 将首先展示它并引用我面临的两个问题:

#include <iostream>
#include <typeinfo>
#include <type_traits>

using namespace std;

// Unspecialized version
template<typename...Ts>
struct Tmin
{
using type = void;
};

template<typename T>
struct Tmin<T>
{
using type = T;
};

template<typename T1, typename T2, typename...Ts>
struct Tmin<T1, T2, Ts...>
{
using type = typename std::conditional<sizeof(T1) < sizeof(T2),
typename Tmin<T1, Ts...>::type, typename Tmin<T2, Ts...>::type
>::type;
};

int main()
{
cout << typeid(Tmin<float, int, double>::type).name() << endl;
return 0;
}
  1. 这在 VS2013 中不起作用(发出 fatal error C1075)。我是在使用任何非标准设施还是有更符合标准的方式来编写上述内容?

  2. 假设我想使用 sizeof 以外的方法来比较类型。是否有一种明智的方式/良好的设计能够将元函数作为比较器传递,并且仍然保持使用 sizeof 的默认行为(在未指定的情况下)?

最佳答案

看起来 MSVC 正在搞砸解析 std::conditional表达。好像觉得不到sizeof(T1) < sizeof(T2)之间是开场<另一个模板参数。添加一组额外的括号就可以了。

template<typename T1, typename T2, typename...Ts>
struct Tmin<T1, T2, Ts...>
{
using type = typename std::conditional<(sizeof(T1) < sizeof(T2)),
// ^ ^
typename Tmin<T1, Ts...>::type, typename Tmin<T2, Ts...>::type
>::type;
};

在我看来这像是一个 MSVC 错误。

关于c++ - 如何在可变参数包中找到 "min"类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23895981/

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