2

我正在使用 boost::format 打印出一个结构。但是, boost::format 似乎无法处理“位域”,请参见以下示例:

// Linux: g++ test.cc -lboost_system
#include <cstdio>
#include <iostream>
#include <boost/format.hpp>

struct bits_t {
    unsigned int io: 1;
    unsigned int co;
};

int main(void) {

    using std::cout;
    using boost::format;

    bits_t b; b.io = 1; b.co = 2;

    printf("io = %d \n", b.io); // Okay
    cout << format("co = %d \n") % b.co;  // Okay
    // cout << format("io = %d \n") % b.io;  // Not Okay
    return 0;

}

注意cout我注释掉的第二个,它试图打印出位字段printf,但编译器抱怨:

`error: cannot bind bitfield ‘b.bits_t::io’ to ‘unsigned int&’

我想知道我错过了什么?谢谢

4

1 回答 1

3

问题是boost::format通过 const 引用(不是副本)获取参数,并且引用不能绑定到位域。

您可以通过将值转换为临时整数来解决此问题。一种简洁的方法是应用一元operator +

 cout << format("io = %d \n") % +b.io;  // NOW Okay
于 2013-04-17T20:12:30.157 回答