C++ 不同模板参数的重载运算符 #包括 模板 结构循环缓冲区{}; 模板 布尔运算符==(常数循环缓冲区和a、常数循环缓冲区和b){ 返回true; } int main(){ 环形缓冲区a; 循环缓冲区b; a==b; 返回0; }

C++ 不同模板参数的重载运算符 #包括 模板 结构循环缓冲区{}; 模板 布尔运算符==(常数循环缓冲区和a、常数循环缓冲区和b){ 返回true; } int main(){ 环形缓冲区a; 循环缓冲区b; a==b; 返回0; },c++,c++11,templates,operator-overloading,template-meta-programming,C++,C++11,Templates,Operator Overloading,Template Meta Programming,此代码仅适用于2==3。但是我的2!=我的3。请帮助我修理操作员。以下内容可能适合您: 模板 布尔运算符==(循环缓冲区常数和a,循环缓冲区常数和b){ //一些有意义的逻辑 返回true; }; 您遇到的问题是a和b属于不同的类型,即这两个对象具有不同的MaxElements模板参数。因此,您需要提供运算符==重载来处理这种情况。以下内容可能适合您: 模板 布尔运算符==(循环缓冲区常数和a,循环缓冲区常数和b){ //一些有意义的逻辑 返回true; }; 您遇到的问题是a和b属于不同的

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

以下内容可能适合您:

模板
布尔运算符==(循环缓冲区常数和a,循环缓冲区常数和b){
//一些有意义的逻辑
返回true;
};

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

以下内容可能适合您:

模板
布尔运算符==(循环缓冲区常数和a,循环缓冲区常数和b){
//一些有意义的逻辑
返回true;
};

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

@nuttracker否,我不使用!=无论如何。
circular\u buffer
不应该是操作员的模板参数。那个操作员一文不值。除此之外,您是否了解通过指定两种不同的尺寸,实际上有两种不同的端部混凝土类型?一个是
循环缓冲区
,另一个是
循环缓冲区
。他们不是同一类型的。当这种情况发生时(或一般情况下),您希望通过
操作符==
实现什么?@WhozCraig但必须使用什么参数来代替此?
模板
名称是任意的,并且当前只需隐藏(对于函数)具有相同名称的模板类。所以这是误导。@胡桃夹子不,我不使用!=无论如何。
circular\u buffer
不应该是操作员的模板参数。那个操作员一文不值。除此之外,您是否了解通过指定两种不同的尺寸,实际上有两种不同的端部混凝土类型?一个是
循环缓冲区
,另一个是
循环缓冲区
。他们不是同一类型的。当这种情况发生时(或一般情况下),您希望通过
操作符==
实现什么?@WhozCraig但必须使用什么参数来代替此?
模板
名称是任意的,并且当前只需隐藏(对于函数)具有相同名称的模板类。所以这是误导。
#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;
}