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私がコメントアウトした2番目に注意してください。ビットフィールドを出力しようとしますprintfが、コンパイラは文句を言います:

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

私は何を逃したのだろうか?ありがとう

4

1 に答える 1

3

問題は、boost::format(コピーではなく) const 参照によって引数を取得し、参照をビットフィールドにバインドできないことです。

これは、値を一時的な整数に変換することで解決できます。簡潔な方法の1 つは、 unary を適用することoperator +です。

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