2013-11-14 35 views
1

C++中是否可以創建變量,在每次使用不同的值後它會被展開?C++ define changeable宏

例如,我想,繼

#define mytype [smth here] 
void foo(mytype a,mytype b,mytype c) 

將擴大到

void foo(mytype1 a,mytype2 b,mytype3 c) 

void foo(mytype1 a,mytype11 b,mytype111 c) 
+6

簡短的回答沒有;很長的答案:Nooooooooo – Raxvan

+0

宏在預處理過程中展開。你不能。 – devnull

+0

你爲什麼需要這個? –

回答

1

你不能有一個宏,改變它擴展到,但你可以使它擴展成不同的東西:

std::string foo() 
{ 
    static int x; 
    return std::string("myvar") + std::to_string(x++) + "\n"; 
} 

#define myvar foo() 

cout<<myvar; 
cout<<myvar; 

會打印出

myvar1 
myvar2 
+1

我不會在'myvar'的定義中加分號... – leemes

+0

@leemes ya,好點。還缺少一條新線。 –

+0

foo()會在運行時擴展,但我需要在編譯期間這麼做( – Somnium

0

如果輸出時它應該只會增加,你可以定義一個結構重寫operator<<,如:

struct myvarstruct { 
    int i; 
    myvarstruct() : i(1){} 
} myvar; 

ostream &operator << (ostream &o, myvarstruct &s) { 
    return o << "myvar" << s.i++; 
} 
+0

我需要它在預處理/編譯期間增加,而不是運行時間。 – Somnium

3

以下是使用的示例3210實現的功能參數的事情:

#include <boost/preprocessor/repetition/enum_binary_params.hpp> 

void foo(BOOST_PP_ENUM_BINARY_PARAMS(3, mytype, p)); 

,將擴大到

void foo(mytype0 p0, mytype1 p1, mytype2 p2); 
-1
#define mytype [smth here] 
#define TYPE(a, b) _TYPE(a, b) 
#define _TYPE(a, b) a##b 
void foo(TYPE(mytype, 1) a, TYPE(mytype, 2) b, TYPE(mytype, 3) c)