我試圖用一個整數參數實現一個操縱器。 除了一個小小的差異,我認爲我正在做的是和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);
}
編譯器將返回此錯誤消息:
「敵不過‘運營商< <’(操作數類型是‘顯示’和‘MANIP’)」
誰能告訴我什麼我做錯了嗎?
你可以用'Display&operator <<替代'Display&operator <<(const & m);'。''position''返回一個xvalue,並且沒有默認轉換成一個左值 – Franck
是啊!你和Sam是對,謝謝! – rrd