我知道還有其他類似的問題,但他們不是很清楚。模板專業化或功能超載
現在我覺得這是一個愚蠢的問題,因爲我確定我已經有了答案,但是讓我反問。
所以我基本上有一個函數,它在一個字符串,然後基於它轉換它,像這樣適當的變量類型:
template<class T>
void ConvertValue(std::string str, T &variable)
{
variable = static_cast<T>(str);
}
因此這似乎是罰款是否正確?但事情是,你不能轉換一個字符串來說一個int或一個浮點數,所以我將不得不爲整數和浮點數和其他類型,它不能轉換爲模板特化,所以我問的是我應該是這樣的:
void ConvertValue(std::string str, int &variable) { variable = atoi(str.c_str()); }
void ConvertValue(std::string str, float &variable) { ... }
void ConvertValue(std::string str, double &variable) { ... }
void ConvertValue(std::string str, std::vector<int> &variable) { ... }
...等
,或者我應該使用模板特殊化?哪一個會更有意義?我傾向於函數重載,因爲大多數類型都會有自己的轉換函數,因爲它們略微不同,函數重載對我來說是合乎邏輯的,但我不知道我是否錯過了某些東西。
我應該堅持功能重載嗎?或切換到模板專業化?
我不會假設static-casting一個by-val的'std :: string'到任意一個帶有* work *的類型變量,更不用說「很好」。但是你可以在strstream的幫助下完成你想要的任務。 – WhozCraig 2013-04-30 23:01:32
這似乎是一件奇怪的事情。如果你說,將字符串轉換爲列表,你會發生什麼?清單?一個列表與每個條目的字符串之一?這將如何處理用戶創建的對象?似乎stringstream應該照顧標準整數,浮點數等......如果需要的話,也許是模板化的容器版本。但是你希望在這裏完全達到什麼目的? –
2013-04-30 23:03:09