2014-03-26 111 views
0

作爲一些初學C++模板練習的一部分,我試圖編寫一個模板作爲std :: vector在C++中的包裝,並且遇到了一個障礙。處理C++模板中的字符串

說我將使用的變量的類型是int,double和string。

我試圖寫一個循環來填補載體:

type element; 

while (element != 0){ 
    std::cout << "Enter an element, use 0 to exit: "; 
    std::cin >> element; 

    if(element != 0) 
    items.push_back(element); 
} 

的問題是,儘管這適用於INT &雙,它不與的std :: string的工作,作爲字符串不支持!=。我還可以看到自己在制定矢量中最大/最小值時遇到問題。

解決此問題的最佳方法是什麼?

回答

3

你可以提供一個可選的模板參數,它是一個比較器(我認爲標準lib經常這樣做)。不那麼雄心勃勃,你可以使用type {}進行比較,以便與任何默認ctor進行比較:if(element != type{})。 (你的問題不是沒有比較運算符的字符串,但沒有定義運算符來與int進行比較)。

+0

請問您可以通過示例或指向某些代碼的鏈接來說明可選模板參數嗎? – lelouch

+0

例如http://www.cplusplus.com/forum/general/34569/。使用Google搜索「C++可選比較模板參數」等提供了很多鏈接,但有時很難找到權威來源。一些標準庫文檔或教程應該是有幫助的。一般參考可選模板參數https://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fdefault_args_for_templ_params.htm。 –

+0

+1,儘管恕我直言,它更直接和直觀地接受* sentinel *值,並使用正常的'!=':'while(element!= sentinel)'進行比較 - 一個好處是,標記值可以在提示:'...使用「<< sentinel <<」退出:「...' –