gpt4 book ai didi

C++:有没有什么好的读/写方法而不用在函数名中特别说明字符类型? (cout 与 wcout 等)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:53 25 4
gpt4 key购买 nike

我在让程序根据模板从文件中读取时遇到问题,例如:

bool parse(basic_ifstream<T> &file)
{
T ch;
locale loc = file.getloc();
basic_string<T> buf;
file.unsetf(ios_base::skipws);
if (file.is_open())
{
while (file >> ch)
{
if(isalnum(ch, loc))
{
buf += ch;
}
else if(!buf.empty())
{
addWord(buf);
buf.clear();
}
}
if(!buf.empty())
{
addWord(buf);
}
return true;
}
return false;
}

当我用 <char> 实例化此类时,这将起作用, 但在使用 <wchar_t> 时出现问题(很明显)。

课外,我正在使用:

for (iter = mp.begin(); iter != mp.end(); ++iter )
{
cout << iter->first << setw(textwidth - iter->first.length() + 1);
cout << " " << iter->second << endl;
}

要写入此数据结构中的所有信息(它是 map<basic_string<T>, int> ),并且如预期的那样,如果 iter->first 则 cout 爆炸不是 char数组。

我在网上看过,一致认为是使用 wcout,但不幸的是,由于该程序要求可以在编译时更改模板 ( <char> -> <wchar_t> ),我不确定我该怎么做只需选择 cout 或 wcout 即可。也就是说,除非有一种方法可以在不更改大量代码的情况下读取/写入宽字符。

如果这个解释听起来复杂得令人尴尬,请告诉我,我会尽力解决。

最佳答案

使用特征类。您无需在代码中直接引用 cout,而是引用 traits<T>::cout然后专攻traits<char>到 std::cout 和 traits<wchar_t>想知道。

已更新

template <typename T>
class traits {
public:
static std::basic_ostream<T>& tout;
};

template<>
std::ostream& traits<char>::tout = std::cout;

template<>
std::wostream& traits<wchar_t>::tout = std::wcout;

int _tmain(int argc, _TCHAR* argv[])
{
traits<char>::tout<<"Ascii";
traits<wchar_t>::tout<<L"Unicode";
return 0;
}

关于C++:有没有什么好的读/写方法而不用在函数名中特别说明字符类型? (cout 与 wcout 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com