hel*_*vio -2 c++ macros templates stl
检查STL库的源代码,我遇到了指定模板变量的宏_Tp和_Up.他们在哪里定义,两者有什么区别?为什么要使用这样的宏?我找不到有关此编程策略的任何信息.
编辑:我指的是GCC STL库,特别是复杂类,它是一个模板类,内容如下:
00115 template<typename _Tp>
00116 class complex
00117 {
00118 public:
00120 typedef _Tp value_type;
00121
00124 complex(const _Tp& = _Tp(), const _Tp & = _Tp());
00125
00126 // Lets the compiler synthesize the copy constructor
00127 // complex (const complex<_Tp>&);
00129 template<typename _Up>
00130 complex(const complex<_Up>&);
00776 };
Run Code Online (Sandbox Code Playgroud)
我正在尝试理解复制构造函数及其注释的含义,并决定这是否是一个简单的可复制类.
我假设您正在查看 GNU 标准库实现,libstdc++ 使用这些名称作为模板参数,它们不是宏。
此类名称是为实现保留的(以下划线开头,后跟大写字母)是保留的。
例如(来自<functional>)
template<typename _Tp, typename _Up>
auto
_M_call(_Tp&& __object, _Up * const *) const noexcept
-> decltype((*std::forward<_Tp>(__object)).*std::declval<__pm_type&>())
{ return (*std::forward<_Tp>(__object)).*__pm; }
Run Code Online (Sandbox Code Playgroud)
或者
template<typename _Tp>
struct less : public binary_function<_Tp, _Tp, bool>
{
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x < __y; }
};
Run Code Online (Sandbox Code Playgroud)
编辑:
这同样适用于complex您在编辑中显示的模板:_Tp设计模板参数,即您可以将模板用作:
std::complex<double> c1;
std::complex<float> c2;
Run Code Online (Sandbox Code Playgroud)