gpt4 book ai didi

c++ - std::max,但用于模板参数

转载 作者:太空狗 更新时间:2023-10-29 19:57:19 32 4
gpt4 key购买 nike

我发现自己需要一个模板类,它可以在编译时找到两个常量值中的最大值;像这样:

template<enum_t e1, enum_t e2>
struct max_of { static const enum_t value = SOMEHOW_MAX(e1, e2); };

哪里enum_t是枚举类型,max_of<x, y>::value应等于 x 的最大值和 y .所以问题是:用什么代替 SOMEHOW_MAX ?我被限制使用 c++14 功能,所以它不能只是 std::max ,因为那不能在编译时比较模板参数值。如果enum_t的基数|相当小,一种可能的实现方式 max_of是通过模板特化,像这样:

template<>
struct max_of<E_FIRST, E_SECOND> { static const enum_t value = E_SECOND; };

这确实有效,但即使对于少量 enum_t 显然也变得相当冗长值。有没有什么方法可以让模板系统以编程方式获取最大值?

最佳答案

在 C++14 中,您应该只使用 std::max。但是,如果 C++14 是禁区,那么下面的简单代码应该会有所帮助:

template<enum_t A, enum_t B> 
struct max_of {
enum { value = A > B ? A : B};
};

关于c++ - std::max,但用于模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37844474/

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