2010-11-25 61 views
0

如何定義一個宏(這個Q與this Q和CashCow的答案有某種關係),如果這個宏在代碼的不同行上使用,它將展開爲一個不同的整數?
我希望能夠輸入:寫一個宏

X<1> _0; 
X<1> _1; 
例如高清後

。我想_0和_1是不同類型的。

+0

這有什麼錯在問題中提到`__LINE__`? – kichik 2010-11-25 12:14:45

+0

@kichik __LINE__的問題在於它明確說明,並且根據CashCow,如果使用宏,則不必這樣做。 – 2010-11-25 12:15:52

回答

1

你可以使用這樣的事情:

#define var(T,...) T<__VA_ARGS__,__LINE__> 

,或者如果你只是做這一個知道類型:

#define var(x) T<(x),__LINE__> 

我建議使用__COUNTER__代替然而__LINE__,它允許該類型是全球獨一無二的,不僅僅是這條線的獨特之處。

編輯:重讀這個問題,你究竟是什麼意思的「不同的整數」?如在不同的類型或不同的初始化值?

template<typename T = int, const T nValue> class Integer 
{ 
    T Value; 
    Integer() : Value(nValue) 
    { 
    } 

    operator T() 
    { 
     return Value; 
    } 
}; 

#define VI(x) Integer<__COUNTER__> x 

或(這似乎是一個你想要的)

#define I(x) int x(__COUNTER__) 
2

這不完全是你想要的,但它非常接近。

#define X(arg) Y<(arg), __LINE__> 

X(1) _0; 
X(1) _1; // different type than previous line