簡體   English   中英

如何在模板函數中使用 C++ 字符串文字?

[英]How to have C++ string literals in template function?

有人可以幫我寫這個函數以便它適用於寬字符和窄字符嗎? 我已將一些字符串文字硬編碼為窄字符(8 位)。

如何根據模板參數創建窄或寬的寬度中性字符串文字?

template<typename OS, typename T1, typename T2>
OS& operator<<(OS& os, pair<T1,T2> p)
{
    return os << "(" << p.first << "," << p.second << ")";
}

這適用於 clang++ V5.0.1 Clang & g++ 7.1:

cout << "pair{3.2, \"hello\"}=" << pair{3.2, "hello"} << endl;

我很驚訝。 這也有效,但它是否標准和正確?

wcout << L"wcout pair{3.2, \"hello\"}=" << pair{3.2, L"hello"} << endl;

謝謝

齊格弗里德

字符串文字的字符類型由文字開頭引號前面指定的前綴(或缺少前綴)決定。 您不能動態指定該前綴,因此字符串文字的類型不能基於模板。

但是,至少對於單個字符,您可以使用std::basic_ios::widen()方法在運行時將char轉換為ostream的指定CharT類型(取決於流的當前語言環境),例如:

template<typename OS, typename T1, typename T2>
OS& operator<<(OS& os, const pair<T1,T2> &p)
{
    return os << os.widen('(') << p.first << os.widen(',') << p.second << os.widen(')');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM