汎用ポインタが汎用参照によってキャプチャされないのはなぜですか?
struct DebugOutput {
DebugOutput(std::ostream& out = std::cerr) : m_Out(out) {}
template<typename T>
inline DebugOutput& operator <<(T&& value) {
m_Out << value;
return *this;
}
private:
std::ostream& m_Out;
};
シンプルなロガーを実装している間、私はstd::endl
がuniversal referenceによって捕獲されないが分かりました。
DebugOutput dbg;
dgb << std::endl;
は、私が説明し、この
this postはあなたが特に関数ポインタの署名を取る構造、すなわち内オーバーロードされた関数を追加する必要がありますが見つかりました:関数ポインタが普遍的で捕捉されていないのはなぜ
typedef std::ostream& (*StandardEndLine)(std::ostream&);
inline DebugOutput& operator<<(StandardEndLine manip) {
return *this;
}
参照 ?それはint
またはvoid*
のようなタイプではありませんか?
テンプレート/オーバーロードです。 – Xeo
http://stackoverflow.com/a/1136617/46642 –
[std :: endlが重複している可能性があります。演算子<<をオーバーロードすると型が不明です(http://stackoverflow.com/questions/1134388/stdendl-is- of-unknown-type-when-overloading-operator) – Xeo