需要實現乙個函式,template int get_unique_id(t t),傳入任意型別的變數,變數型別相同時,返回值id相同,且如果為不同的變數型別返回的id不同(例如 get_unique_id(100) 引數為int型別,返回值為 1,get_unique_id(1000) 引數同樣為int型別,返回值為 1, get_unique_id('a') 引數為char型別返回值為 2,get_unique_id('d')引數為char型別,返回值為 2...)。
想法一:
首先想到的實現方法:
可以在模板函式get_unique_id()中定義乙個static靜態變數 初值為static int i = -1; 在外邊定義乙個全域性變數int g_cout = 0;
利用模板函式編譯時,相同型別會使用同乙個函式,不同型別會生成不同函式的機制進行生成(例如 get_unique_id(2) 和 get_unique_id(3) 都是整型,使用的是同乙個函函式get_unique_id(int ),,而get_unique_id('c') 模板生成的函式是 get_unique_id(char)。考慮到每個函式裡都有乙個static int i 變數,通過外部全域性變數的計數就能為每乙個不同變數,返回
乙個不同的id;**實現如下:
int g_count = 0;
templateint get_unique_id(t t)
templateint get_unique_id()
int main()
輸出結果:
可以實現需求
想法二:
可以通過typeid關鍵字識別出不同型別,再經過map查詢,返回不同的id
實現如下:
std::mapg_type_name;
int g_count = 0;
templateint get_unique_id(t t)
return iter->second;
}templateint get_unique_id()
return iter->second;
}int main()
執行結果如下:
同樣也能實現上述功能。
感覺上第一種較簡單明瞭,不過會生成非常多static 全域性靜態變數,而且不具有可操作性,不能清空id(如果需要清空id,需要將所有型別的函式都執行一遍才能做到將每個函式中的static int unique置為-1),重新生成。
第二種想法,可以隨時釋放清空掉map中的內容,重新生成id序。
C 任意型別Any
可以使用任意型別的型別就是 void 了。只需要強制轉換型別即可,任意使用。編譯器並不會嚴重警告。我們不應該濫用。void 並沒有過多約束,是萬能的型別。執行任意操作都可以編譯通過 需要自己管理指向的物件 char szbuf 4 void p szbuf int p 1234567889 long...
php 獲取變數的型別
gettype 獲取變數的型別 描述string gettype mixed var 返回 php 變數的型別 var.warning 不要使用 gettype 來測試某種型別,因為其返回的字串在未來的版本中可能需要改變。此外,由於包含了字串的比較,它的執行也是較慢的。使用 is 函式代替。返回的字...
獲取變數資料型別
獲取變數資料型別 1 獲取檢測變數的資料型別 typeof可用來獲取檢測變數的資料型別 var num 10 console.log typeof num number var str abc console.log typeof str string var flag true console.l...