回答編集履歴

2 fix

yohhoy

yohhoy score 6067

2017/11/16 00:36  投稿

> defineで定義することにこだわっていません。
> AppMonitor::msg()を呼び出すだけで、呼び出し先の`__FILE__`と`__LINE__`を受け取れる方法が知りたいです。
(私が知る限りは)そのような方法は存在しません。`__FILE__`, `__LINE__`はプリプロセッサにより展開されるため、マクロ以外での解法は存在しないと思います。
それ以降は他回答者の方と同じです。マクロ名(プリプロセッサで処理)とそれ以外の名前(コンパイラで処理)は明確に使い分けることを強くお勧めします。
----
一応、プログラミング言語C++の実験的な拡張「Fundamentals TS v2」の中に所望の機能に近いものは存在します。
[http://en.cppreference.com/w/cpp/experimental/source_location](http://en.cppreference.com/w/cpp/experimental/source_location)
対応している処理系はあるんでしょうかね?私は知りません。
[GCCは対応済み](https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html)、[Clangは未対応](https://clang.llvm.org/cxx_status.html)のようです。(MSVCやICCは不明ですが多分未対応でしょう)
1 appendix

yohhoy

yohhoy score 6067

2017/11/16 00:33  投稿

> defineで定義することにこだわっていません。
> AppMonitor::msg()を呼び出すだけで、呼び出し先の`__FILE__`と`__LINE__`を受け取れる方法が知りたいです。
(私が知る限りは)そのような方法は存在しません。`__FILE__`, `__LINE__`はプリプロセッサにより展開されるため、マクロ以外での解法は存在しないと思います。
それ以降は他回答者の方と同じです。マクロ名(プリプロセッサで処理)とそれ以外の名前(コンパイラで処理)は明確に使い分けることを強くお勧めします。
それ以降は他回答者の方と同じです。マクロ名(プリプロセッサで処理)とそれ以外の名前(コンパイラで処理)は明確に使い分けることを強くお勧めします。
----
一応、プログラミング言語C++の実験的な拡張「Fundamentals TS v2」の中に所望の機能に近いものは存在します。
[http://en.cppreference.com/w/cpp/experimental/source_location](http://en.cppreference.com/w/cpp/experimental/source_location)
対応している処理系はあるんでしょうかね?私は知りません。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る