Я пытаюсь написать простой шаблон функции в C++, в котором я печатаю значение переменной неизвестного типа. Проблема в том, что я не могу понять, как это сделать, поскольку переменная может быть либо указателем, либо примитивным типом. С примитивным типом я могу просто распечатать значение; но указатели требуют де-ссылки.Печать значения переменной неизвестного типа?
Следующий код дает мне ошибку:
#include <iostream>
#include <type_traits>
using namespace std;
template<typename T>
void foo(T someVar) {
if(std::is_fundamental<T>::value) {
cout << "It's primitive! \n" << someVar << endl;
} else {
cout << "It's a pointer! \n" << *someVar << endl;
}
}
int main(int argc, char **argv) {
int x = 5;
foo(x);
int *y = new int();
*y = 5;
foo(y);
delete y;
return 0;
}
Я получаю ошибку при компиляции является:
test.cc: In function 'void foo(T) [with T = int]':
test.cc:19:8: instantiated from here
test.cc:13:5: error: invalid type argument of unary '*' (have 'int')
Он жалуется, что я пытаюсь разыменовываются примитивный тип из мой первый вызов foo(), но именно поэтому я использую if-statement: для проверки, является ли он примитивным или нет. Как я могу реализовать то, что я пытаюсь сделать?
Это не частичные специализации, а фактически перегрузки. Если вы думаете о них как о частичной специализации, [вы можете получить наибольшее удивление] (http://www.gotw.ca/publications/mill17.htm). – 5gon12eder