3

これboolは C++ で使用されますが、.BOOLとして定義される Microsoft 固有の型ですint

私のコードは、最初は Windows 用に作成されたものを使用していますが、Mac に移植するときにBOOL、コードを bool に変更せずに同じ方法を維持しようとしています。BOOL

このようなものは機能しますか?

    typedef int8_t _Bool;         
    typedef _Bool (BOOL);
    static const BOOL False = 0;
    static const BOOL True = 1;

はいの場合、より良い方法とその理由はありますか?
そうでない場合、代わりに何をすべきでしょうか?

4

4 に答える 4

7

優れた IDE が BOOL から bool へのグローバルな変更を行えなかった理由がわかりません。携帯性が高いほうがいいです。読みにくいので、typedefは好きではありません。

于 2012-06-20T10:16:43.540 に答える
3

独自のものを展開する際に私が目にする最大の問題は、認識されるboolテンプレート仕様が を認識boolせずBOOL、デフォルト ルートに進むことです。具体的にvector<bool>は、別のコード ベースを使用して、ベクトルの表現にビットをパックすることでスペースを節約します。を使用vector<BOOL>すると、約 8 倍の大きさの表現になります。

于 2012-06-20T10:18:37.563 に答える
1

最上位のヘッダー ファイルで次のようなことができます。

#ifndef /* MICROSOFT specific macro */
typedef bool BOOL;
static const BOOL True  = true;  // True  or TRUE
static const BOOL False = false; // False or FALSE
#endif

他のオプションは、マクロを事前定義するためのコンパイル時オプションを使用できます。g++ -DBOOL=bool

于 2012-06-20T10:16:30.240 に答える
1

BOOLは として定義されているため、int移植しているコードの一部が何らかのint.

したがって、私は次のようなものに行きます:

#if NOT_MICROSOFT
    typedef int BOOL;
    #define TRUE 1
    #define FALSE 0
#endif

BOOL移植するコードがタイプが reallyであるintか reallyであるかに関係なく正しく動作することを確認する機会がある場合はbool、ほとんどの場合、それを変更して使用する機会がありますbool(またはint8_t、好きなように使用します)。

于 2012-06-20T11:31:52.930 に答える