###前提・実現したいこと
現在、C/C++でプログラムのログやメッセージを標準出力するクラスを作成しています。
その出力に実行したソースコード名、行数を表示したく、以下のようなソースを書いています
今のやり方だとせっかく出力用の関数をAppMonitorクラスにまとめているのに
msg()としてしか呼び出すことができない。
これをAppMonitor::msg()のようなメンバ関数のように呼び出したい
見た目だけの問題なんですが、
知見をいただけないでしょうか?
※追記
defineで定義することにこだわっていません。
AppMonitor::msg()を呼び出すだけで、呼び出し先の
__FILE__と__LINE__を受け取れる方法が知りたいです。
/* msg()を実行した先のファイル名と行数を追記する定義 */ #define msg(format, ...) AppMonitor::message(format, __FILE__, __LINE__, __VA_ARGS__) /* 実際に作りたい定義 */ // #define AppMonitor::msg(format, ...) AppMonitor::message(format, __FILE__, __FILE__, __VA_ARGS__) /* プログラムの標準出力をまとめるクラス */ class AppMonitor{ /* メッセージを出力するメンバ関数 */ template<typename... Rest> // 可変長引数のためのテンプレート static void message(const char* format, // printf用のフォーマット文字列 const char* file, // msg()からもらうファイル名 const int line, // msg()からもらう行数 const Rest&... rest){ // 可変長引数 /* printf用フォーマットとファイル名,行数を合わせる*/ std::string str = std::string(file) + " " + std::to_string(line) + " " + std::string(format); /* printfで出力 */ printf(str.c_str(), rest...); } }
###補足情報(言語/FW/ツール等のバージョンなど)
開発環境はUbuntu 16.04, コンパイラはgcc 5.4.0
C++11を使用しています

回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/17 14:49