写一个宏

时间:2010-11-25 12:12:56

标签: c++ macros

如何定义一个宏(这个Q在某种程度上与this Q和CashCow的答案相关)如果在代码的不同行上使用这个宏,它将扩展为一个不同的整数?
我希望能够输入:

X<1> _0;
X<1> _1;
在这样的def之后。我希望_0和_1属于不同的类型。

2 个答案:

答案 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__)