代码之家  ›  专栏  ›  技术社区  ›  chila

既然strstream功能已被弃用,我如何才能获得相同的strstream功能?

c++
  •  3
  • chila  · 技术社区  · 16 年前

    我经常这样写代码:

    void fun(char *buff, unsigned size)
    {
        std::strstream str(buff, size);
        str << "hello world: " << 5;
    }
    

    所以我可以在任意缓冲区上使用流输出。我发现这种技术既有效(无分配)又有用(流!)。既然std::strstream已被弃用,那么如何才能获得与此代码相同的速度和灵活性呢?

    3 回复  |  直到 16 年前
        1
  •  5
  •   Peter Alexander    16 年前

    标准库不提供这种功能。然而,Boost使用它的通用流和数组源/接收器。

    Boost Generic Stream
    Boost Array Devices

    char buff[size];
    boost::stream<boost::array_sink> out(buff, size);
    out << "Hello, world!";
    

    (未经测试的代码)

        2
  •  2
  •   Adam W    16 年前

    尝试:

    #include <sstream>
    std::stringstream str;
    str << "hello world: " << 5;
    

    编辑:对不起,我想我把你的问题简化了。该功能是在更改为sstream时删除的内容之一。这里有类似的东西(我认为这是可行的…):

    #include <sstream>
    void fun(char *buff, unsigned size)
    {
        std::stringstream str;
        str << "hello world: " << 5;
        memcpy(buff, str.str().c_str(), size);
    }
    
        3
  •  -1
  •   Dummy00001    16 年前

    既然std::strstream已被弃用, 我怎么能得到同样的呢 速度+灵活性 这个代码?

    我认为它被否决是有原因的。在处理流到达缓冲区末尾的情况时,我曾经遇到过许多可移植性问题。缺乏统一性可能触发了倾向于std::string使用版本的弃用。

    否则,您在iostreams和“<<”运算符的上下文中提到“速度”会让我很高兴。我在过去做过很多测试,iostreams根本赶不上好的ol'snprintf()。对每个元素进行函数调用-运算符“<<”的效果-无论您如何看待它,都会很累,而且速度总是较慢。这是严格的类型检查的成本。