我沒有看到任何理由讓他們依賴實施。
這是我使用的東西,對於實際的操縱器,創建一個返回以下幫助器實例的函數。如果你需要存儲數據,只是將其存儲幫手,一些全局變量,單,等裏面......
/// One argument manipulators helper
template < typename ParType >
class OneArgManip
{
ParType par;
std::ostream& (*impl)(std::ostream&, const ParType&);
public:
OneArgManip(std::ostream& (*code)(std::ostream&, const ParType&), ParType p)
: par(p), impl(code) {}
// calls the implementation
void operator()(std::ostream& stream) const
{ impl(stream,par); }
// a wrapper that allows us to use the manipulator directly
friend std::ostream& operator << (std::ostream& stream,
const OneArgManip<ParType>& manip)
{ manip(stream); return stream; }
};
例如基於這樣的機械手:
OneArgManip<unsigned> cursorMoveUp(unsigned c)
{ return OneArgManip<unsigned>(cursorMoveUpI,c); }
std::ostream& cursorMoveUpI(std::ostream& stream, const unsigned& c)
{ stream << "\033[" << c << "A"; return stream; }
對於一些解釋:
- u使用機械手,返回綁定到助手的實現助手的新實例
- 流嘗試處理助手,調用助手中
- 的
<<
重載調用()
運營商的幫手
- 調用真正的實現與原來的機械手調用中傳遞的參數輔助的
如果你想我也可以發佈2個參數和3個參數助手。原則是相同的。
不是重複的,而是相關的(有趣的)主題:[流操縱器如何工作?](http://stackoverflow.com/questions/4633864/how-do-the-stream-manipulators-work) – Nawaz 2011-04-28 12:24:24