c ++模板中百分号(%)和锐符号(#)的含义是什么?

时间:2014-08-18 06:28:44

标签: c++ templates

这是来自MS VC stl的代码:

 template<typename _Fun_t,
    typename _Arg_t> inline
    binder1st<_Fun_t> bind1st(_Fun_t% _Func, _Arg_t _Left)
    {   // return a binder1st functor adapter
    typename _Fun_t::first_argument_type _Val = _Left;

    return (binder1st<_Fun_t>(_Func, _Val));
    }

和QT:

 #define Q_ARG(type, data) QArgument<type >(#type, data)

1 个答案:

答案 0 :(得分:5)

这些都不是特定于模板的。

'%'是C ++的Microsoft扩展,是C ++ / CLI的一部分。它定义了跟踪参考。类型为T&的正常左值引用变量是对另一个变量的引用; T%也是如此,除了它指的是可能被垃圾收集器移动的托管对象; GC知道当它移动对象时,它必须修补对该对象的所有跟踪引用。

'#'是C预处理器的stringify运算符。它表示以下宏参数的值,由双引号括起。所以这个:

Q_ARG(MyType, 12345)

将扩展到:

QArgument<MyType >("MyType", 12345);