【问题标题】:Overload operator for different template parameters不同模板参数的重载运算符
【发布时间】:2021-02-17 21:21:02
【问题描述】:
#include <cstddef>

template <typename T, std::size_t MaxElements>
struct circular_buffer{};

template <typename circular_buffer>
bool operator==(const circular_buffer &a, const circular_buffer &b) {
    return true;
}

int main() {
    circular_buffer<int, 2> a;
    circular_buffer<int, 3> b;
    a == b;
    return 0;
}

此代码仅适用于 2==3。但是我的 2 != 我的 3。帮我修理操作员。

【问题讨论】:

  • @NutCracker 不,我不使用 != neverwhere。
  • circular_buffer 不应该是您的运营商的模板参数。那个操作员一文不值。除此之外,您是否了解通过指定两种不同的尺寸,您实际上有两种不同的最终混凝土类型?一个是circular_buffer&lt;int,2&gt;,另一个是circular_buffer&lt;int,3&gt;。他们不是同一类型。当这种情况发生时(或就此而言,一般而言),您希望通过 operator == 实现什么目标?
  • @WhozCraig 但是这个参数必须是什么?
  • template &lt;typename circular_buffer&gt; 名称是任意的,目前只是隐藏(对于函数)具有相同名称的模板类。所以这是误导。

标签: c++ c++11 templates operator-overloading template-meta-programming


【解决方案1】:

以下可能对您有用:

template <typename T, std::size_t M1, std::size_t M2>
bool operator==(circular_buffer<T, M1> const & a, circular_buffer<T, M2> const & b) {
    // some meaningful logic
    return true;
};

您遇到的问题是a 和b 属于不同类型,即这两个对象具有不同的MaxElements 模板参数。因此,您需要提供运算符 == 来处理这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多