c++ - C++模板中的百分号(%)和尖锐符号(#)是什么意思

标签 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)

最佳答案

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

“%”是 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/

相关文章:

c++ - 基于返回类型的函数模板推导?

c++ - Linux 守护进程中的错误处理

c++ - 根据模板类型选择类模板的成员类型?

c++ - 指向全局运算符的函数指针在 VC++ 上编译,而 clang 给出错误

Django - 模板标签中的 verbose_name

Python模板引擎

c++ - 有没有办法从函数返回新对象或对现有对象的引用?

c++ - 编译时 C++ 项目抛出错误 C2228,这不是预期的,因为控件在运行时未到达该点

templates - C++11: "parameter pack"和 "variadic template"之间有什么区别?

c++ - 模板堆栈没有推送?