【发布时间】: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<int,2>,另一个是circular_buffer<int,3>。他们不是同一类型。当这种情况发生时(或就此而言,一般而言),您希望通过operator ==实现什么目标? -
@WhozCraig 但是这个参数必须是什么?
-
template <typename circular_buffer>名称是任意的,目前只是隐藏(对于函数)具有相同名称的模板类。所以这是误导。
标签: c++ c++11 templates operator-overloading template-meta-programming