哪种方法更适合为函数提供编译时常量?函数参数与模板参数

iam*_*ind 6 c++ comparison templates function-parameter

我在整个代码中的几个地方都调用了日志记录功能.对于每个日志,我必须提供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);
}
Run Code Online (Sandbox Code Playgroud)

称之为,

log(str, __LINE__, __COUNTER__);
Run Code Online (Sandbox Code Playgroud)

(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);
}
Run Code Online (Sandbox Code Playgroud)

称之为,

log<__LINE__, __COUNTER__>(str);
Run Code Online (Sandbox Code Playgroud)

我无法决定,因为第一种方法提供了简单性,但我们在编译时传递不变.第二种方法是完美的,但编译时间可能会增加.这个任务很繁琐,我还没有实现任何一个,所以我没有任何基准.

如果有人能够从他们的经验/知识中回答这个问题,那将是一个很大的帮助.

ron*_*nag 3

我会选择第一个选项。传递两个整数对性能的影响可以忽略不计。优化器也可能会内联函数调用,在这种情况下,两者之间没有区别。我认为第二个选项是一个坏主意,因为您将无缘无故地创建同一函数的许多版本。