小编Aki*_*ain的帖子

如何在 C++ 中创建处理输入和输出的流?

我正在尝试创建一个既是输入流又是输出流的类(如std::coutstd::cin)。我试图超负荷运营商<<>>,但后来,我明白了写这样的代码是不明智的做(因为这将改写C ++流的方法)和维持是很辛苦的时候类喜欢std::basic_iostreamstd::basic_ostreamstd::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++ iostream c++-faq streambuf

14
推荐指数
1
解决办法
906
查看次数

有没有一种“简单”的方法可以让 ld 输出解构函数名称?

我发现必须修复链接时发生的 C++ 错误(尤其是未定义的引用错误)非常令人沮丧,因为所有函数名称都被破坏了。错误名称的示例:

_ZNK5boost7archive6detail11oserializerINS0_13text_oarchiveEN9galandria8UniverseEE16save_object_dataERNS1_14basic_oarchiveEPKv
Run Code Online (Sandbox Code Playgroud)

读起来太难了,找到真正的功能就更难了。

有没有办法说服ld输出损坏的名称?

c++ c++-faq

7
推荐指数
1
解决办法
553
查看次数

C++ 使用自定义键和值或类似的东西制作数组

我有一个函数,我为它设置了自定义键和值,我想将它们返回给接收器,以便他们可以看到,我希望能够看到键和值,以便我可以用它做一些事情,例如这个例子我打印了它们。

我放在那里的例子很清楚我想要什么。

//#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)

c++ arrays

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×3

c++-faq ×2

arrays ×1

iostream ×1

streambuf ×1