私は間に合わせと-__DEBUG
はこのようなものでトレース有効に行うために思っていた:STDに付着したダミーのデバッグクラス:: ENDL過負荷
#ifdef __DEBUG
# define dbg std::cout
# define err std::cerr
#else
#include <iostream>
class dummy_cout
{
private:
public:
dummy_cout & operator << (auto &obj)
{ return *this; }
dummy_cout & operator << (std::result_of< decltype(&std::endl) >::type &obj)
{ return *this; }
};
# define dbg dummy_cout()
# define err dummy_cout()
#endif
int main(int argc, char *argv[])
{
dbg << "Bla, bla. bla..." << std::endl;
}
しかし、それは私を与える:
cond_dbg.cpp:16:66: error: decltype cannot resolve address of overloaded function
dummy_cout & operator << (std::result_of< decltype(&std::endl) >::type &obj)
私はdecltype
,result_of
,ostream
などの6種類のバリエーションも試しましたが、それ以上のステップはまだありません。
これは簡単です。 __DEBUG
を定義するコードをコンパイルすると、cout
とcerr
となります。私が普通のコンパイルをした場合、私はdummy_cout
を持っているだけで何もしませんが、私のコードを変更せずにコンパイルすることができます。
ご協力いただきますようお願い申し上げます。あなたはstd::endl
は関数ではありませんので、それは関数テンプレートだdecltype(&std::endl)
を書き込むことはできません
dummy_cout'クラス 'であなたの'演算子<< '過負荷にコメントを:それはあなたがC++'のstd :: ostream'挿入をオーバーロードする方法だけではありません演算子.... – WhiZTiM
なぜ 'std :: endl'を別に扱う必要がありますか?それは、テンプレートバージョンでキャプチャする必要があります。 –
ありがとう@Henri Menke。これは私の最初の裁判でしたが、うまくいきませんでした。 'テンプレート引数の控除/置換に失敗しました ' – j4x