这是我正在玩的一些C++代码:

#include <iostream>
#include <vector>

#define IN ,
#define FOREACH(x,y) for(unsigned int i=0;i<y.size();i++) { x=y[i];
#define ENDFOREACH }

using namespace std;

int main()
{
    vector<int> ints;
    ints.push_back(3);
    ints.push_back(4);
    ints.push_back(5);
    ints.push_back(6);

    FOREACH(int item IN ints)
        cout << item;
    ENDFOREACH

    return 0;
}

但是,我得到一个错误:



如果我将IN更改为逗号,则代码会编译。如何获得IN代替逗号?

更新:对于那些感兴趣的人,这是最终版本,如果我自己说的话,这是非常不错的。
#include <iostream>
#include <vector>

#define in ,
#define as ,
#define FOREACH_(x,y,z) \
        y x; \
        if(z.size()) x = z[0]; \
        for(unsigned int i=0,item;i<z.size();i++,x=z[i])
#define foreach(x) FOREACH_(x)

using namespace std;

int main()
{
    vector<int> ints;
    ints.push_back(3);
    ints.push_back(4);
    ints.push_back(5);
    ints.push_back(6);

    foreach(item as int in ints)
    {
        cout << item << endl;
    }

    return 0;
}

最佳答案

其他人已经解释了为什么它不能按原样编译。

为了使其工作,您必须给IN一个变成逗号的机会。为此,您可以在宏定义中引入额外级别的“间接”

#define IN ,
#define FOREACH_(x,y) for(unsigned int i=0;i<y.size();i++) { x=y[i];
#define FOREACH(x) FOREACH_(x)
#define ENDFOREACH }

在这种情况下,您将不得不使用逗号替代(例如IN),并且不再可以显式指定逗号。即现在这个
FOREACH(int item IN ints)
    cout << item;
ENDFOREACH

编译很好,而
FOREACH(int item, ints)
    cout << item;
ENDFOREACH

才不是。

关于c++ - 为什么不编译,如何实现它呢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2687284/

10-11 22:35
查看更多