【发布时间】:2022-08-17 22:27:11
【问题描述】:
我一直在涉足discregrids LRUCache,但我无法让它与glm\'s vec3\'s 一起工作。我不断收到binary \'<\': no operator found which takes a left-hand operand of type \'const _Ty\' 错误,即使我已经为底层 std:map [文件.hpp]:
bool operator<(const glm::vec3& lhs, const glm::vec3& rhs)
{
return lhs.x < rhs.x || lhs.x == rhs.x && (lhs.y < rhs.y || lhs.y == rhs.y && lhs.z < rhs.z);
}
template <typename K, typename V>
class LRUCache
{
using key_type = K;
using value_type = V;
using key_tracker_type = std::list<key_type>;
using key_to_value_type = std::map<key_type, std::pair<value_type, typename key_tracker_type::iterator>>;
...
}
LRUCache<glm::vec3, double>
-
我假设第 3 行正在生成错误?编译器告诉你 glm::vec3.y 类让我们称之为 Foo 没有函数 bool operator<((maybe const) Foo& other)
-
不相关:比较功能看起来关闭。
vec3是否应该仅仅因为它的位置而被认为比另一个少? -
从我所看到的情况来看,这取决于目的,这是我在 SO 上找到的答案之一,所以我就顺其自然了。
-
如果目的是能够将
vec3s 存储在地图中,请使用unordered_map并实现散列函数。这应该可以让你避免以后出现一些奇怪的结果。 -
好吧,我正在将 Discregrid 用于 SDF 生成,这是在那里使用很多的类之一。我宁愿只能够创建一个运算符重载,而不必重写库的一半。
标签: c++ dictionary caching key glm-math