相关疑难解决方法(0)

操作后恢复std :: cout的状态

假设我有这样的代码:

void printHex(std::ostream& x){
    x<<std::hex<<123;
}
..
int main(){
    std::cout<<100; // prints 100 base 10
    printHex(std::cout); //prints 123 in hex
    std::cout<<73; //problem! prints 73 in hex..
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,在从函数返回后,是否有任何方法可以将cout的状态"恢复"到原来的状态?(有点像std :: boolalpha和std :: noboolalpha ..)?

谢谢.

c++ iostream

91
推荐指数
7
解决办法
3万
查看次数

用于C++ iostream的自定义操纵器

我想为ostream实现一个自定义操纵器,对插入到流中的下一个项目进行一些操作.例如,假设我有一个自定义操纵器引用:

std::ostringstream os;
std::string name("Joe");
os << "SELECT * FROM customers WHERE name = " << quote << name;  
Run Code Online (Sandbox Code Playgroud)

操纵者引用将引用名称以产生:

SELECT * FROM customers WHERE name = 'Joe'
Run Code Online (Sandbox Code Playgroud)

我该如何完成呢?谢谢.

c++ string iostream

11
推荐指数
3
解决办法
9967
查看次数

Boost JSON 序列化格式(Boost 1.76.0)

如何控制boost json库中的序列化格式。我正在尝试序列化该对象,并且浮点数以科学计数法输出。如何以固定符号输出,如 12000000 而不是 1.2E7?和 0 而不是 0E0。

IE

{"id":"de69041b-141b-4e01-b349-458f26f08259","price":3.343403E12,"qty":1.2E7}
{"id":"de69041b-141b-4e01-b349-458f26f08259","price":0E0,"qty":0E0}
Run Code Online (Sandbox Code Playgroud)

这是一个以指数格式输出浮点数的最小程序(ubuntu 20.04,g++ 9.3.0,boost 1.76.0)

#include <iostream>
#include <boost/json/src.hpp>

using namespace std;
namespace bj = boost::json;

int main(void)
{
    bj::object obj1 = {
        {"id", 1},
        {"price", 3343403000000.00},
        {"qty", 13546000000000.00}
    };

    bj::object obj2 = {
        {"id", 2},
        {"price", 0.0},
        {"qty", 0.0}
    };
    cout << "obj1:" << bj::serialize(obj1) << endl;
    cout << "obj2:" << bj::serialize(obj2) << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

obj1:{"id":1,"price":3.343403E12,"qty":1.3546E13}
obj2:{"id":2,"price":0E0,"qty":0E0}
Run Code Online (Sandbox Code Playgroud)

c++ json boost

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

标签 统计

c++ ×3

iostream ×2

boost ×1

json ×1

string ×1