C 是否有像 Pascal 一样的“with”关键字?

新手上路,请多包涵

with Pascal 中的关键字可用于快速访问记录的字段。有人知道C++是否有类似的东西吗?

例如:我有一个包含许多字段的指针,我不想这样输入:

 if (pointer->field1) && (pointer->field2) && ... (pointer->fieldn)

我真正想要的是 C++ 中这样的东西:

 with (pointer)
{
  if (field1) && (field2) && .......(fieldn)
}

原文由 user188276 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 651
2 个回答

在 C++ 中,您可以将代码放入由 pointer 引用的类的方法中。在那里,您可以直接引用成员而不使用指针。让它 inline 你几乎得到你想要的。

原文由 user231967 发布,翻译遵循 CC BY-SA 2.5 许可协议

可能你能得到的最接近的是:(这只是一个学术练习。当然,你不能在这些人工 with 块的主体中使用任何局部变量!)

 struct Bar {
    int field;
};

void foo( Bar &b ) {
    struct withbar : Bar { void operator()() {
        cerr << field << endl;
    }}; static_cast<withbar&>(b)();
}

或者,更邪恶一点,

 #define WITH(T) do { struct WITH : T { void operator()() {
#define ENDWITH(X) }}; static_cast<WITH&>((X))(); } while(0)

struct Bar {
    int field;
};

void foo( Bar &b ) {
    if ( 1+1 == 2 )
        WITH( Bar )
            cerr << field << endl;
        ENDWITH( b );
}

或在 C++0x 中

#define WITH(X) do { auto P = &X; \
 struct WITH : typename decay< decltype(X) >::type { void operator()() {
#define ENDWITH }}; static_cast<WITH&>((*P))(); } while(0)

        WITH( b )
            cerr << field << endl;
        ENDWITH;

原文由 Potatoswatter 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题