c++ 为std::min和std::max函数指定别名

w7t8yxp5  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(160)

我尝试基于this answerstd::minstd::max函数创建别名,但如果尝试以下代码:

#include <algorithm>
namespace math
{
   template< typename T >
   constexpr auto Max = std::max< T >;
}

如果我运行下面的代码

constexpr int a = 2;
constexpr int b = 3;
constexpr int max = math::Max( a, b );

我得到这个错误:
错误C3245:'数学::最大值':使用变量模板需要模板参数列表
在现代C++中,正确执行此操作的最佳方法是什么?

cunj1qz1

cunj1qz11#

也许这种前沿的现代、守法的、尊重名称空间的、参数转发函数的别名构造可以为您工作。

#define FUNCTION_ALIAS(from, to) \
   decltype(auto) to(auto&& ... xs) \
     { return from(std::forward<decltype(xs)>(xs)...); }

FUNCTION_ALIAS(std::max, Max)
oaxa6hgo

oaxa6hgo2#

一种可能的解决方案是引入函数对象:

struct Max_ {
    template<class T>
    constexpr T operator()(const T& a, const T& b) const {
        return std::max(a, b);
    }
};

inline constexpr Max_ Max = {};

那你就可以

std::cout << Max(4, 5); // prints 5

相关问题