コード全体のいくつかの場所でロギング関数が呼び出されています。すべてのログに、2つのコンパイル時定数を指定する必要があります。達成するための2つのアプローチがあります:
(1)関数の引数:
template<typename T>
void log (const T &obj, const int LINE, const int COUNT)
{
// T is used for some purpose
if(debug)
logging(obj.out(), LINE, COUNT);
}
それを、
log(str, __LINE__, __COUNTER__);
(2)テンプレートパラメータ:
template<typename T, int LINE, int COUNT>
void log (T &obj)
{
// T is used for some purpose
if(debug)
logging(obj.out(), LINE, COUNT);
}
それを、
log<__LINE__, __COUNTER__>(str);
最初のアプローチは単純さを提供するため、私は決定できませんが、コンパイル時に定数を渡します。2番目のアプローチは完璧ですが、コンパイル時間はおそらく長くなります。この作業は面倒で、まだ実装していないので、ベンチマークはありません。
誰かが彼らの経験/知識からこれに答えることができれば、それは大きな助けになるでしょう。