2017-05-24 54 views
-2

我宣佈一個宏如下:如何將int參數傳遞到字符串宏?

#define PIECE_TAG(point,cell)  "<Piece NumberOfPoints=\"" STRING(point) "\" NumberOfCells=\"" STRING(cell) "\">" 

#define STRING(str) #str

而且使用它作爲:

_out << TAB << TAB << PIECE_TAG(pointsOfMesh.size() , elemsOfMesh.size()) << ENTER; 

但它返回一個字符串:

<Piece NumberOfPoints="pointsOfMesh.size()" NumberOfCells="elemsOfMesh.size()"> 

我怎麼能將一個整數值轉換爲C++的宏中的字符串? 非常感謝!

+4

爲什麼不使用返回字符串的函數? C++不鼓勵使用宏。 – InternetAussie

+0

宏沒有內置變量的概念,所以除非你傳入一個整數字面值,否則無法做到這一點 –

+0

編譯完成後宏不再存在。這就是爲什麼他們是宏。所以宏直到運行時才使用一個未知的值是不可能的。 – rici

回答

3

宏解釋字符串,而不是C++代碼。

拋出宏並編寫代碼。

std::string piece_tag(std::size_t point, std::size_t cell) { 
    std::stringstream ss; 
    ss<<"<Piece NumberOfPoints=\"" << point << "\" NumberOfCells=\"" <<cell << "\">"; 
    return ss.str(); 
} 
+0

謝謝你的回覆!我以前寫過它的功能。 我只是找到使用宏的方法。 –

相關問題