field1) &&-6ren">
gpt4 book ai didi

c++ - C++ 是否有像 Pascal 一样的 "with"关键字?

转载 作者:IT老高 更新时间:2023-10-28 22:05:54 24 4
gpt4 key购买 nike

Pascal 中的

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

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

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

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

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

最佳答案

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

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;

关于c++ - C++ 是否有像 Pascal 一样的 "with"关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2279180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com