Всем привет
Есть шаблонная функция (fn
в примере внизу), которая действует по-разному в зависимости от типа аргумента. Есть кастомный тип (TNew
в примере внизу), который является синонимом стандартного типа unsigned char
. Мне нужно чтобы функция действовала по-разному в случаях, когда ей передается стандартный тип или кастомный. C++ же воспринимает кастомный тип как синоним стандартного, и не дает специфицировать функцию.
В общем, проще на примере.
Код внизу не компилируется, так как компилятор трактует void fn(const unsigned char &arg)
void fn(const TNew &arg)
как одно и то же. А нужно, чтобы он различал эти функции/типы.
Такое возможно?
#include <iostream>
#include <iomanip>
typedef unsigned char TNew;
template <class T>
void fn(const T &arg)
{
std::cout << "generic" << std::endl;
}
template <>
void fn(const unsigned char &arg)
{
std::cout << "unsigned char" << std::endl;
}
template <>
void fn(const TNew &arg)
{
std::cout << "TNew" << std::endl;
}
int main()
{
int a;
unsigned char b;
TNew c;
fn(a);
fn(b);
fn(c);
return 0;
}