次のようないくつかのプロパティを定義したいと思います。
#define property(T, x) T x; T get ## x (); void set ## x (T value);
class foo {
public:
property(int, count);
property(float, size);
}
しかし、getcount/setcount ではなく、getCount/setCount と呼ばれるメソッドが欲しいです。
次のようないくつかのプロパティを定義したいと思います。
#define property(T, x) T x; T get ## x (); void set ## x (T value);
class foo {
public:
property(int, count);
property(float, size);
}
しかし、getcount/setcount ではなく、getCount/setCount と呼ばれるメソッドが欲しいです。
コメントが言うように、あなたはそれをすることはできません。プリプロセッサはそのようなことはしません。
したがって、最初のコメントで@Shahbazが言ったことに従うか、このようなことをして、getとset ofget_count
とset_count
formを提供します。
#define property(T, x) private : T m_## x; \
public : T get_## x () { return m_## x;} \
void set_## x (T value) { m_## x = value; }
class foo {
public:
property(int, count);
property(float, size);
};
int main() {
foo f;
f.set_count(10);
std::cout << f.get_count() << std::endl;
return 0;
}
変数はprivate
セクションで宣言され、その名前はm_count
であり、関数はセクションで (宣言されているだけでなく)定義されていることに注意してください。public
または、マクロのCount
代わりに次のように渡すこともできます。count
property(int, Count);
これを行うと、変数 asm_Count
および関数 asgetCount
およびを作成できますsetCount
。それはあなたが望むものに最も近いです。
(私が知っている)Cプリプロセッサを使用してこれを行う方法はありません。get_count()
妥協案として、アンダースコアを使用して、読みやすいものを使用することをお勧めします。その他の選択肢:
m4
、最初のステップとして使用して調査することができます。m4
私は非常に似たようなことをしたので、それは間違いなく可能です。とはいえ、これはあなたが達成したいことには少し複雑に思えます。#define property(T, x, name)
名前を個別に指定できるように、パラメーターを追加します。それはより柔軟ですが、おそらくあなたが望むものではありません。最後の2つの所見:このように書く方が効率的だと思われるかもしれませんが、コードを管理している人は誰でも検索を行っsetCount()
ても見つからない可能性があり、あなたが行ったことを理解するまで時間が無駄になることを忘れないでください。つまり、コード保守の観点から、シンプルに保ちます。次に、マクロは大文字で簡単に識別できるため、大文字で表すことをお勧めします。繰り返しますが、これはコードを保守しているときに本当に役立ちます。