0

我想知道是否有人可以在编码时给我一个减少重复的指针。

我需要多次调用函数来填充结构,例如:

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

} TEntry;

我需要用函数调用填充这些值的每个值,尽管返回值各不相同,但所有值都使用相同的函数。宏是否足以以某种方式创建模板,以便返回类型取决于特定参数(“字符串”)

例如:

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 或模板不会有任何帮助(或者这将是一个糟糕的解决方案)。请注意,如果您想在不重新编译的情况下进行更改,那么外部资源(如 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 回答