2010-11-25 79 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