0

コーディングの際に重複を減らすための指針を誰かが教えてくれるのではないかと思っていました。

構造体にデータを入力するために関数を何度も呼び出す必要があります。次に例を示します。

typedef struct {
    uint16_t u16_a;
    bool b_org;
    char* c_c;
    uint16_t u16_d;

} TEntry;

これらの各値に関数呼び出しを入力する必要があります。戻り値は異なりますが、すべてに同じ関数が使用されます。何らかの方法でテンプレートを作成するにはマクロで十分であるため、戻り値のタイプは特定のパラメーター( "string")に依存します。

例えば:

Trrelevant::Trrelevant()
{
    TPoint* u_apoint = Insufficient::FindValue("A");
    if (u_bpoint != NULL) {
        int a = u_apoint;
    }

    TPoint* p_apoint = Insufficient::FindValue("borg");
    if (p_bpoint != NULL) {
        bool b = p_bpoint;
    }


    TPoint* p_cpoint = Insufficient::FindValue("C");
    if (etc != NULL) {
        char* c = etc;
    }

    TEct* etc = Insufficient::FindValue("ETC");
    if (etc != ETC) {
        etc = etc;
    }

    TEntry entry = {a,
                    b,
                    c,
                    etc};
}

このコードはコンパイルされておらず、正確ではありません。説明しようとしているだけです。私はC++に弱く、マクロは初めてですが、マクロでこれを解決する方法を知っている人はいますか?

お時間をいただきありがとうございます

4

2 に答える 2

0

最近、同じ種類の問題が発生しました。入力にどのようなソースを使用しているかわかりません。個人的には、入力としてXMLを使用しました。次に、XMLを解析するBuilderクラスがあり、ファクトリ関数を呼び出して、パーサーからのデータを使用してC++のすべての構造体を構築します。

MACROやtempltesが役に立たないと思います(またはそれは悪い解決策になるでしょう)。再コンパイルせずに変更したい場合は、外部リソース(xmlなど)が便利であることに注意してください。

一番

于 2012-11-08T23:29:37.167 に答える
0

あなたはこのようなことをすることができますが、それが本当にあなたを買うものはわかりません。

#define QuickFindValue(NAME, TYPE, FUNCTION)             \
     TYPE *NAME##Value = Insufficient::FindValue(#NAME); \
     if (NAME##Value == NULL) { FUNCTION; }

あなたはそれを次のように使うでしょう:

QuickFindValue(C, TPoint, { 
  char *c = CValue;
  // Do stuff..
});
于 2012-11-08T23:31:31.697 に答える