美好的一天,C++只在模板類型爲字符串時才執行到大寫轉換
我正在使用模板編寫一個簡單的C++鏈接列表。我已經得到了一切工作,但我希望通過將所有字符轉換爲小寫字母來區分大小寫,以便在模板類型爲字符串時增加功能。
所以,我寫了下面的代碼片段來處理任何內容,將其轉換爲全部小寫:
#define TEMPLATE string // changing this changes the template type in the rest of the program
Stack <TEMPLATE> s; //not used in this example, but just to show that I have an actual template for a class declared at some point, not just a definition called TEMPLATE
TEMPLATE word; // User inputs a word that is the same type of the Linked List Stack to compare if it is in the Stack.
cin >> word; // just showing that user defines word
for (unsigned int i = 0; i < word.length(); i++)
{
if (word.at(i) >= 'A' && word.at(i) <= 'Z')
word.at(i) += 'a' - 'A';
}
的問題是,當我的堆棧的模板,然後比較字堆棧不是字符串類型,那麼它顯然會拋出錯誤消息,因爲for循環是專門爲了查看字符串而編寫的。
那麼,有沒有辦法讓這個函數更通用,以便任何類型都可以通過? (我不這麼認爲,因爲沒有錯誤檢查整數,等等字符串是唯一依靠這個)
或者,有沒有辦法,我只能執行上面的代碼,當我我的堆棧和比較變量的模板是字符串類型?
我看着異常處理,除非我非常習慣Python如何工作,所以我無法弄清楚如何用C++實現。
正如一個側面說明,我沒有使用任何內置的函數來將字符串轉換爲所有小寫,所以這不是一個選項,我不在尋找這些建議。
宏是不是你用C做模板++。我的意思是,甚至有一個'template'關鍵字......解決方案是模板專門化,但是你需要使用真正的C++模板而不是宏hackery。 – StoryTeller
我不確定這段代碼是否讓你感到困惑,或者如果我仍然做錯了什麼。我的堆棧類被設計爲一個模板。我可以簡單地寫成Stack s;和字符串詞,但我想這樣做,使這兩個變量類型一起改變。如果有一個合適的方法來做到這一點,那麼如果你能指出我正確的方向,我會很感激。雖然我沒有看到這方面的任何內容,但這就是爲什麼我沒有做到這一點。謝謝。 –
我對任何事情都不感到困惑。這不是關於你的類模板,而是關於你的函數模板的破解。 – StoryTeller