1

ゲームの構造を解析しています。構造物については大体知ってるけど、知らないこともあるし、あまり気にしていないこともたくさんあります。しかし、物事が整列するように、解析でそれらが必要です。例えば:

template <unsigned int Size>
class unknown
{
    BYTE data[Size];
};

struct s_object
{
    int stuff;
    unknown<100> unk1;
    int otherstuff;
    unknown<200> unk2;
};

これは不自然な例ですが、私がやろうとしていることを示しています。メンバーに名前を付けてunk1からunk2. 理想的にはこうなりたい

 struct s_object
    {
        int stuff;
        unknown<100>;
        int otherstuff;
        unknown<200>;
    };

しかし、もちろんそれはうまくいきません。コンパイラがランダムな名前を生成する方法、名前を使用しない方法、または単にパディングとして扱う方法はありますか?

4

4 に答える 4

2

編集:GCCでさえこれを行うことはできません! 修正しました。

一般的に、いいえ。__FILE____LINE__、および/または__COUNTER__ (後者は別のコンパイラ拡張機能ですが、とりわけ GCC および MSVC でサポートされています) を使用してマクロをハックし、必要に応じてフィールドに名前を付けることができます。

于 2013-01-27T23:47:25.120 に答える
1

マクロを使用できます__COUNTER__(ただし、プリプロセッサのトリックが必要になります)。GCCVisual C++、およびおそらくその他によって実装されています。

次に、たとえば、使用時に などに展開されるという名前のマクロを定義でき _ます。それを使用すると、コードは次のようになります。_unused_15_unused_16

struct s_object
{
    int stuff;
    unknown<100> _;
    int otherstuff;
    unknown<200> _;
};

策略は、すなわち

#define CAT(a,b)           a##b
#define CAT_DELAYED(a,b)   CAT(a,b)
#define _                  CAT_DELAYED(_unused_,__COUNTER__)
于 2013-01-27T23:52:35.897 に答える
1

これを「自動的に」行う必要がある場合は、次のようにします。

#define UNKNOWNY(line, size) char unknown_##line[(size)]
#define UNKNOWNX(line, size)  UNKNOWNY(line, size)
#define UNKNOWN(size)   UNKNOWNX(__LINE__, size)

しかし、それが単に書くことよりもはるかに優れているとは本当に思いませんchar unknown1[100]。ご存知のように、それほど長くはありません。いつでもコピー/貼り付けできます。

編集: の追加レベルを追加します#define

于 2013-01-27T23:52:50.807 に答える
0

申し訳ありませんが、名前を定義することはできません。

于 2013-01-27T23:46:23.027 に答える