【发布时间】:2015-09-24 02:36:34
【问题描述】:
我想使用标准 libc++ 的映射。因此,为键类型定义 operator
我检查了 operator
png_pixel p1, p2;
p1.red = 5; p2.red = 20; // init
if(p1 < p2)
puts("true");
else
puts("false");
这就是运算符的定义<:>
#include <tuple> // C++11
bool
operator<(const png_pixel& a, const png_pixel& b)
{
return std::tie(a.red, a.green, a.blue, a.alpha) < std::tie(b.red, b.green, b.blue, b.alpha);
}
png_pixel 是这样定义的结构:
// My source code code
typedef png::rgba_pixel png_pixel;
// libpng++ rgba_pixel.hpp http://www.nongnu.org/pngpp/
namespace png
{
template< typename T >
struct basic_rgba_pixel
{
typedef pixel_traits< basic_rgba_pixel< T > > traits;
basic_rgba_pixel()
: red(0), green(0), blue(0), alpha(0)
{
}
/**
* \brief Constructs rgba_pixel object from \a red, \a green,
* \a blue and \a alpha components passed as parameters.
* Alpha defaults to full opacity.
*/
basic_rgba_pixel(T red, T green, T blue,
T alpha = traits::get_alpha_filler())
: red(red), green(green), blue(blue), alpha(alpha)
{
}
T red;
T green;
T blue;
T alpha;
};
typedef basic_rgba_pixel< byte > rgba_pixel;
// other things
}
但是当我尝试在 C++ 映射中使用 png_pixel 作为键时,GCC 和 Clang 并不满意。
# GCC 4.9
error: no match for ‘operator<’
(operand types are ‘const png::basic_rgba_pixel<unsigned char>’
and ‘const png::basic_rgba_pixel<unsigned char>’)
# Clang 3.5
error: invalid operands to binary expression
('const png::basic_rgba_pixel<unsigned char>'
and 'const png::basic_rgba_pixel<unsigned char>')
如果需要,完整的源代码可在https://gitlab.com/RyDroid/Libre2DCarRacingsSimulator 的分支映射转换器中获得 libpng++ 至少在 Debian 中被打包为 libpng++-dev。
问候。
【问题讨论】:
-
operator<函数的声明在map的创建点是否可用?请发帖MCVE。 -
您的示例代码中没有“地图” - 请提供适当的测试用例
-
我认为这可能是一个命名空间的事情。有
png::basic_rgba_pixel、std::map和::operator<。三个不同的命名空间。
标签: c++ dictionary struct