少于模板参数的比较
Less than comparison of template arguments
我有一个实现红黑树的模板类,它的行为有点像(伪)映射。伪映射,因为它不存储键,只存储值,键嵌入值中。它将需要运算符==和运算符<重载以针对任意密钥和彼此(使用嵌入式密钥)测试存储的值。例如
struct Val
{
//some actual data
std::string key;
bool operator==(const Val &val) { return this->key == val.key; }
bool opeartor==(const std::string &str) { return this->key == str; }
bool opeartor<(const Val &val) { return this->key < val.key; }
bool opeartor<(const std::string &str) { return this->key < str; }
};
这种"值"将进入这个模板化的类:
template<typename T>
class Map
{
struct Node
{
//...
T data;
};
public:
//..
template<typename K> T value(const K &key) const
{
Node *it;
//...
if(it->data == key)
//...
int dir = (it->data < key);
//...
}
};
然而,虽然行if(it->data == key)
检查得很好(我还没有使用该类),但第二行int dir = (it->data < key);
没有出现错误"在模板参数列表中解析错误"。奇怪的是,如果我将比较更改为<=
,它编译得很好。然而,在那一点上,我已经知道它是不相等的(第一次检查,所以<
可以。
我该如何修复它?为什么它抱怨一个操作员而不是其他操作员?
T.C.已经在评论中发布了答案,所以我将重复它作为答案。这种行为是由于GCC中长期存在的错误造成的https://gcc.gnu.org/bugzilla/show_bug.cgi?id=10200当一个人在命名方面不太有创意,并且在类中有一堆相同的名称时(在这种情况下,嵌套类中的成员变量名为data
,超类中的会员方法名为data
),它就会表现出来。
相关文章:
- 没有默认构造函数作为模板参数的自定义比较器
- C++复杂情况的比较器通过参数问题
- 为什么 std::stable_sort() 的比较函数的参数必须是设置常量?
- C++模板参数之间的比较似乎被忽略了
- 在C++排序中为比较函数指定参数
- 在c++中隐藏不同的std::map比较参数
- 为什么比较函数类型需要指定为模板参数?
- 在 constexpr-if 条件下比较 constexpr 函数参数会导致错误
- 如何将参数传递到自定义比较C 中分类的函数
- 比较优先队列中的参数
- C++函数来返回基于参数的比较器通用映射类型?
- find_if中的模板比较器作为第三个参数
- 与自定义比较函数作为模板参数的编译器错误
- C++ 比较命令行参数与 strcmp
- 带有额外参数的排序列表以进行比较功能
- 当参数相等时,为什么必须std :: sort比较函数返回false
- c++omp,比较参数和常量
- 比较参数包?扩展语法
- std::map 的比较参数对严格排序有什么要求?
- x86 程序集比较参数