好奇的类对象连接c ++

时间:2016-01-13 11:05:38

标签: c++ class object concatenation

#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
    
    }
    

1 个答案:

答案 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是错误的。