【发布时间】:2021-05-24 12:32:40
【问题描述】:
标准库是否允许用户将函数对象(如 std::plus 和 std::minus)专门用于自定义类型?
如果我的第一个问题的答案是肯定的,是否允许用户更改呼叫运营商的声明?例如,由于 C++14 std::minus::operator() 声明如下:
constexpr T operator()( const T& lhs, const T& rhs ) const;
更改此运算符使其不再是 constexpr 或返回 double 而不是 T 是否合法?
namespace std
{
template <>
struct minus<MyArrayType>
{
double operator ()(const MyArrayType& x, const MyArrayType& y) const
{
return l2_norm(x - y);
}
};
} // std
【问题讨论】:
-
你不应该覆盖
operator -吗? -
@user253751 假设,该类型的运算符 - 已经定义,但我想改变它的行为,以便它可以以不同的方式使用。
-
那么你应该使用不同的函子而不是 std::minus。做一个mentalmushroom::l2_norm_minus
-
@user253751 嗯,有道理,但想象一下,对于我的特殊需求,专门化 std::minus 会更方便。此外,我有一个普遍的好奇心:)
-
更有趣的问题是:WHY?哪个算法使用这个模板?这个算法/模板是你的吗?
标签: c++