我想在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语句的原因:检查它是否是原始的。我将如何去实施我想要做的事情?
这些不是部分专业化,但实际上超载。如果你认为他们是部分专业化的,[你可以感到惊讶](http://www.gotw.ca/publications/mill17.htm)。 – 5gon12eder