Я хотел бы повторно использовать ведение журнала вызовов между единицами перевода, чтобы fx INFOLOG< TU_T1 >();
и INFOLOG< TU_T2 >();
могли просто стать INFOLOG();
для обоих. Я бы поставил разные шаблонные специализации в tu1.cpp и tu2.cpp.
Вариант использования: заголовочный файл можно использовать в разных единицах перевода при применении другой реализации для файлов cpp. Но если мне нужно включить спецификатор типа в вызов, это разрушит подпись вызова, и .h не может быть повторно использован.
Я пытался использовать псевдоним шаблона, но не смог его скомпилировать.
Попытка 1: шаблон параметров
template< typename TU_T >
void INFOLOG();
template<> void INFOLOG< TU1 >()
{} // specialization in tu1.cpp compiles OK
template<> void INFOLOG< TU2 >()
{} // specialization in tu2.cpp compiles OK
INFOLOG< TU1 >(); // call in tu1 works, but tu2 can't call tu2's specialization.
Попытка 2: наложение шаблона (псевдокод, чтобы понять идею)
???? using INFOLOGBOTH = INFOLOG< TU1 >; // no compile in tu1.cpp or tu1.h
???? using INFOLOGBOTH = INFOLOG< TU2 >; // no compile in tu2.cpp or tu2.h.
В чем отсутствует мой подход или синтаксис?