シンプルなロガーを実装しながら
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
によってキャプチャされないことがわかりました。
DebugOutput dbg;
dgb << std::endl;
この投稿を見つけました。これは、構造内にオーバーロードされた関数を追加する必要があることを説明しています。具体的には、関数ポインター シグネチャを使用します。つまり、次のようになります。
typedef std::ostream& (*StandardEndLine)(std::ostream&);
inline DebugOutput& operator<<(StandardEndLine manip) {
return *this;
}
関数ポインターがユニバーサル参照によってキャプチャされないのはなぜですか? int
as or型じゃないのvoid*
?