私は構造体とクラスをいじっていて、試してみたかった本当にクールなコーディングを見つけました: 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).
上記のコード出力を取得できない原因は何ですか?