这是来自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)
答案 0 :(得分:5)
这些都不是特定于模板的。
'%'是C ++的Microsoft扩展,是C ++ / CLI的一部分。它定义了跟踪参考。类型为T&
的正常左值引用变量是对另一个变量的引用; T%
也是如此,除了它指的是可能被垃圾收集器移动的托管对象; GC知道当它移动对象时,它必须修补对该对象的所有跟踪引用。
'#'是C预处理器的stringify运算符。它表示以下宏参数的值,由双引号括起。所以这个:
Q_ARG(MyType, 12345)
将扩展到:
QArgument<MyType >("MyType", 12345);