如何定义一个宏(这个Q在某种程度上与this Q和CashCow的答案相关)如果在代码的不同行上使用这个宏,它将扩展为一个不同的整数?
我希望能够输入:
X<1> _0;
X<1> _1;
在这样的def之后。我希望_0和_1属于不同的类型。
答案 0 :(得分:2)
这不是你想要的,但它非常接近。
#define X(arg) Y<(arg), __LINE__>
X(1) _0;
X(1) _1; // different type than previous line
答案 1 :(得分: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__)