2

私は構造体とクラスをいじっていて、試してみたかった本当にクールなコーディングを見つけました: x-マクロです。

私のコードは、ヘッダー、x-macro、およびメインの cpp ファイルの 3 つのビットに分割されています。プログラムは完成しておらず、コード カバレッジと磨き上げがまだ残っていますが、x マクロを使用して構造体を構築しようとしており、構造体の内容を画面に出力したいと考えています。

これが私のxマクロです

#define X_AIRCRAFT  \
X(int, Crew) \
X(int, SeatingCapacity) \
X(int, Payload) \
X(int, Range) \
X(int, TopSpeed) \
X(int, CargoCapacity) \
X(int, FuelCapacity) \
X(int, Engines) \
X(int, Altitude) \
X(double, mach) \
X(double, Wingspan)

これが私のヘッダーです(今はかなり不毛です)

#include <iostream>
#include <string>
#ifndef X_AIRCRAFT
#include "xmacro.xmacro"
#endif // !



using namespace std;


typedef struct {
#define X(type, name) type name;

    X_AIRCRAFT
#undef X
}Public_Airplane;

//Prototypes
void iterater(Public_Airplane *p_a);

これが私main()のコードです (ここでコードをいくつか切り取りました。要約すると、ここで行ったことは、さまざまなプロパティを持つ Airplane クラスを作成することでした。次に、Airplane のプロパティを継承し、独自のことを行う 3 つの異なるサブクラスを作成しました。私の問題がそこにあると思わない限り、私はクラスを投稿することはまったく避けます.私がすることは、正しく機能していない関数を投稿することです...)

#include <iostream>
#include <string>
#include <iomanip>
#include "aircraft.h"

#ifndef X_AIRCRAFT
#include "xmacro.xmacro"
#endif // !


using namespace std;




    int main()
{
    Public_Airplane p_a;

     iterater(&p_a);

    system("pause");
    return 0;
}



void iterater(Public_Airplane *p_a)
{

    //I want to print to screen the contents of my x-macro (and therefore my struct)
#define X(type, name) cout << "Value: = " << name;
    X_AIRCRAFT
#undef X
}

私はこれまでマクロを使ったことがなかったので、今やってみようとしています。しかし、私の理解では、前処理されたコードは次のようになります。

int crew;
int SeatingCapacity;
int Payload
int Range;              
int TopSpeed;           
int CargoCapacity;      
int FuelCapacity;       
int Engines;            
int Altitude;           
double mach;            
double Wingspan;

cout << "Value: = " << Crew; (and so on down the list).

上記のコード出力を取得できない原因は何ですか?

4

1 に答える 1