Исключение спецификатора типа шаблона для использования в разных единицах перевода - PullRequest
0 голосов
/ 16 апреля 2019

Я хотел бы повторно использовать ведение журнала вызовов между единицами перевода, чтобы 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. 

В чем отсутствует мой подход или синтаксис?

...