gpt4 book ai didi

c++ - wcout与cout、wstring与string的混淆

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:15:37 26 4
gpt4 key购买 nike

我有一个包含单个 wstring 的类。我有 2 个打印函数,一个用于 ostream,一个用于 wostream

必须像这样使用它们:

 MyClass<char> s;
s.push_back( 'H' );
s.push_back( 'i' );
//Printing with ostream
s.print( std::cout );

MyClass<wchar_t> w;
w.push_back( L'C' );
w.push_back( L'+' );
//Printing with wostream
w.print( std::wcout );

我的问题是,我无法创建一个函数来使用 ostream,这是我的类(class):

template<typename T>
MyClass{

private:

std::wstring *data;

public:

void push_back(const T& t) {

data->push_back(t);
}
//Does not work
void print(std::ostream& out) const{

out<<*data; //Results in a compile error

}
//Does work verry well
void print(std::wostream& out) const {
out << *data;
}


};

我怎样才能做到这一点?

P.S.:我知道这是胡说八道,但实际上这是我去年参加的一次学校考试。所以我不能改变标准。这就是任务。

最佳答案

问题是您正在存储 std::wstring不管模板类型是Tcharwchar_t .相反,您想使用模板 std::basic_string使用适当的类型:

std::basic_string<T> *data;

std::string只是 std::basic_string<char> 的类型定义, 和 std::wstring只是 std::basic_string<wchar_t> 的类型定义.

同样,std::ostream只是 std::basic_ostream<char> 的类型定义, 和 std::wostream只是 std::basic_ostream<wchar_t> 的类型定义, 所以你可以有一个 print接受 std::basic_ostream 的函数以适当的类型为模板。

关于c++ - wcout与cout、wstring与string的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20907672/

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