我正在尝试创建一个既是输入流又是输出流的类(如std::cout和std::cin)。我试图超负荷运营商<<和>>,但后来,我明白了写这样的代码是不明智的做(因为这将改写C ++流的方法)和维持是很辛苦的时候类喜欢std::basic_iostream,std::basic_ostream,std::basic_istream用C可++标准库,因为我必须为每种类型重载运算符。所以,我试图这样定义我的类:
#include <istream>
class MyStream : public std::basic_iostream<char> {
public:
MyStream() : std::basic_iostream<char>(stream_buffer) {}
};
Run Code Online (Sandbox Code Playgroud)
我的问题是std::basic_iostream<char>. 从cppreference 开始,std::basic_iostream::basic_iostream接受一个指向从 派生的流缓冲区的指针std::basic_streambuf:
explicit basic_iostream( std::basic_streambuf<CharT,Traits>* sb );
Run Code Online (Sandbox Code Playgroud)
我已经阅读并尝试了Apache C++ 标准库用户指南第 38 章中的示例。它说我必须传递一个指向流缓冲区的指针,有三种方法可以这样做:
rdbuf()或类似成员)basic_streambuf对象定义为受保护或私有成员最后一个选项最适合我的目的,但如果我直接从std::basic_streambuf类创建一个对象,它什么也不做,是吗?所以我定义了另一个派生自std::basic_streambuf<char>. 但是这次我无法理解要定义哪些函数,因为我不知道在插入,提取和刷新数据时调用了哪个函数。
如何创建具有自定义功能的流?
请注意,这是尝试构建有关创建 C++ 流和流缓冲区的标准指南。
我发现必须修复链接时发生的 C++ 错误(尤其是未定义的引用错误)非常令人沮丧,因为所有函数名称都被破坏了。错误名称的示例:
_ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveEN9galandria8UniverseEE16save_object_dataERNS1_14basic_oarchiveEPKv
Run Code Online (Sandbox Code Playgroud)
读起来太难了,找到真正的功能就更难了。
有没有办法说服ld输出损坏的名称?
我有一个函数,我为它设置了自定义键和值,我想将它们返回给接收器,以便他们可以看到,我希望能够看到键和值,以便我可以用它做一些事情,例如这个例子我打印了它们。
我放在那里的例子很清楚我想要什么。
//#functions.cpp
something returnKeyAndValue(){
something valor;
valor.login = "hey";
valor.senha = "you";
return valor;
}
something returnKeyAndValue2(){
something valor;
valor.value2 = "hello";
valor.value1 = "string";
return valor;
}
//... And a lot of other returnKeyAndValue functions
something PrintKeyAndValuesOfBoth(something KeyAndValue){
for(int i = 0; i < KeyAndValue.size(); i++){
string key = KeyAndValue[i].key;
string value = KeyAndValue[i].value;
cout << "Key: " << key << ", Val: " << value << endl;
}
}
//#test.cpp
#import "functions.cpp"
int main () {
something …Run Code Online (Sandbox Code Playgroud)