#include <iostream>
#define CONCATENATE t; Box(); t
#define END ;
using namespace std;
class Box
{
public:
Box(){ }
Box(string _txt){ }
Box operator|(const Box& b)
{
cout<<"hi from op |"<<endl;
Box box;
return box;
}
void operator+()
{
}
public:
string str;
};
int main( )
{
Box t;
Box tt;
CONCATENATE //this works
CONCATENATE CONCATENATE //this doesn't work because cant understand tt object
END
}
如果我给CONCATENATE CONCATENATE编译器说分号错过那些正确但编译器应该理解t;框(); TT;框(); t因为在分析阶段会删除空格。
如果我写CONCATENATE END编译器执行该操作并且是正确的 吨;框();吨; 如果我写CONCATENATE CONCATENATE END编译器执行该操作并且不正确 吨;框(); t t;框();吨;因为理解分号丢失但在这种情况下我希望编译器理解应该执行对象tt并忽略空格。
我怎么能这样做?
更新
预处理器将字符串连接到tt;对象
int main( ){
Box t;
Box tt;
//this work (is such 2 times CONCATENATE macro)
t; Box(); tt; Box(); t END
//this doesnt work
CONCATENATE CONCATENATE END
}
答案 0 :(得分:1)
至于你的“更新”:
预处理器将字符串连接到tt;对象
不,预处理器不会连接任何内容,除非您使用##
string concatenation preprocessing operation指示它。我只是文本替换,所以让我们从预处理器中查找替换:
//this work (is such 2 times CONCATENATE macro)
t; Box(); tt; Box(); t END
//this doesnt work
CONCATENATE CONCATENATE END
将扩展为
//this work (is such 2 times CONCATENATE macro)
t; Box(); tt; Box(); t ;
//this doesnt work
t; Box(); t t; Box(); t ;
t t;
无法识别为有效语法。你假设它将被连接到tt
是错误的。