这是来自 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)
最佳答案
这些都不是特定于模板的。
“%”是 Microsoft 对 C++ 的扩展,是 C++/CLI 的一部分。它定义了一个跟踪引用。 T&
类型的普通左值引用变量是对另一个变量的引用; T%
也是如此,除了它指的是一个可能被垃圾收集器移动的托管对象; GC 知道当它移动对象时,它必须修补对该对象的所有跟踪引用。
'#' 是 C 预处理器的字符串化运算符。它表示以下宏参数的值,用双引号括起来。所以这个:
Q_ARG(MyType, 12345)
将扩展为:
QArgument<MyType >("MyType", 12345);
关于c++ - C++模板中的百分号(%)和尖锐符号(#)是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25357433/