Если вы можете добавить шаблон PrinterInstance()
внутри Print
template <typename T>
void PrinterInstance (T const & data)
{ ::PrinterInstance(data); }
, который вызывает глобальный PrinterInstance()
, у вас есть то, что компилятор использует метод PrinterInstance()
, когда тип является точнымсоответствие, глобальная версия (проходящая через метод шаблона) в противном случае.
Но, как и в ответе LeDYoM, это требует, чтобы глобальные версии PrinterInstance()
были определены (или, по крайней мере, объявлены) передPrinter
body.
Ниже приведен полный пример компиляции
#include <string>
#include <iostream>
void PrinterInstance ( const std::string& data )
{ std::cout << "STRING, " << data << std::endl; }
struct Print
{
template <typename T>
void Printer (T const & data)
{ PrinterInstance( data ); }
template <typename T>
void PrinterInstance (T const & data)
{ ::PrinterInstance(data); }
void PrinterInstance (int const & data)
{ std::cout << "INTEGER, " << data << std::endl; }
};
int main ()
{
Print p;
p.Printer("3");
p.Printer(5);
}