У меня есть функция ведения журнала, вызываемая в нескольких местах по всему коду. Для каждого журнала я должен указать 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);
Я не могу решить, потому что 1-й подход предлагает простоту, но мы передаем константу во время компиляции. Второй подход идеален, но время компиляции, вероятно, увеличится. Эта задача утомительна, и я еще не реализовал ни одну из них, поэтому у меня нет эталона.
Будет большим подспорьем, если кто-то сможет ответить на этот вопрос из своего опыта/знаний.
logging
, она наверняка будет работать медленнее, чем передача двух целых чисел в качестве аргументов. Поэтому я не вижу, как производительность во время выполнения сильно изменится в любом случае. Это подозрительно похоже на преждевременную оптимизацию. - person Nicol Bolas   schedule 19.12.2011debug
ложно. Конечно, она может быть незначительной. - person Steve Jessop   schedule 19.12.2011