Я пытаюсь реализовать манипулятор с одним целым аргументом. За исключением одной маленькой разницы, я думаю, что делаю именно то, что сказано в this guide и в this question. Единственное различие заключается в том, что мой оператор является членом вместо свободной функции.C++ манипуляторы с параметрами
Я поставлю здесь только соответствующие части моего кода. Некоторые операторы и другие внутренние процедуры будут опущены, чтобы код оставался чистым. Смотрите ниже:
main.cpp
#include "Display.h"
int main()
{
Display disp;
disp << position(3) << "some string here";
// ...
}
Display.h
struct manip
{
Display& (*_f)(Display&, int);
int _i;
manip(Display& (*f)(Display&, int), int i) : _f(f), _i(i) {}
};
manip position(int pos);
class Display
{
private:
int _cursor = 0;
void cursorPosition(int pos);
public:
Display& operator<<(manip& m);
friend Display& setPosition(Display& disp, int pos);
};
Display.cpp
#include "Display.h"
Display& setPosition(Display& disp, int pos)
{
disp.cursorPosition(pos);
return disp;
}
manip position(int pos)
{
return manip(setPosition, pos);
}
Display& Display::operator<<(manip& m)
{
return m._f(*this, m._i);
}
Компилятор возвращает сообщение об ошибке:
«не подходит для„оператора < <“(типы операндов„Display“и„Manip“)»
Может кто-нибудь сказать мне, что я делаю неправильно?
вы можете заменить 'Display & оператор << (Manip & m);' на 'Display & оператор << (Const Manip & m);'. 'Position' возвращает xvalue и нет преобразования по умолчанию не в Lvalue. – Franck
Да! Вы и Сэм Спасибо! – rrd