我想在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