c++模板.template构造

mrlgy 2018-07-17 12:43:10
template<int N>
void printBitset(std::bitset<N> const& bs)
{
std::cout<<bs.template to_string<char,char_traits<char>,allocator<char> >();
}

这里面bs.template to_string<char,char_traits<char>,allocator<char> >()这个语法看不懂,这个to_string<char,char_traits<char>,allocator<char> >()是一个函数调用,那么前面的的bs.template又表达了什么意思
...全文
307 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
winmainx 2020-04-26
  • 打赏
  • 举报
回复
如果没有.template,编译器无法得知紧跟其后的"<"代表的是个template argument list的起始,而非一个"小于"符号。
CyberLogix 2018-07-23
  • 打赏
  • 举报
回复
呵呵,bs.template是个提示符,暗示调用的是模板类std::bitset<N>的成员函数to_string
yshuise 2018-07-22
  • 打赏
  • 举报
回复
这里面bs.template to_string<char,char_traits<char>,allocator<char> >()这个语法看不懂
================
bs是个对象
调用to_string这个函数
这个函数是个模板函数

是书上的一个例子。
mrlgy 2018-07-17
  • 打赏
  • 举报
回复
引用 1 楼 sghcpt的回复:
楼主,在 vs2013调试中发现,上面的bs.template to_string<char, char_traits<char>, allocator<char> >();代码最终调用了下面的代码:
template<class _Elem,
class _Tr,
class _Alloc>
basic_string<_Elem, _Tr, _Alloc>
to_string(_Elem _E0 = (_Elem)'0',
_Elem _E1 = (_Elem)'1') const
{ // convert bitset to string
basic_string<_Elem, _Tr, _Alloc> _Str;
typename basic_string<_Elem, _Tr, _Alloc>::size_type _Pos;
_Str.reserve(_Bits);

for (_Pos = _Bits; 0 < _Pos; )
if (test(--_Pos))
_Str += _E1;
else
_Str += _E0;
return (_Str);
}


而这个代码是在bitset类模板中to_string的代码,那么由此推测,个人认为:前面的的bs.template是告诉编译器调用bitset类模板中to_string的函数进行输出吧。
的确是这样,只是这种语法从来没遇到过,感觉template和后面的tostring应该用括号包含起来,不然太难理解了
sghcpt 2018-07-17
  • 打赏
  • 举报
回复
楼主,在 vs2013调试中发现,上面的bs.template to_string<char, char_traits<char>, allocator<char> >();代码最终调用了下面的代码:
template<class _Elem,
class _Tr,
class _Alloc>
basic_string<_Elem, _Tr, _Alloc>
to_string(_Elem _E0 = (_Elem)'0',
_Elem _E1 = (_Elem)'1') const
{ // convert bitset to string
basic_string<_Elem, _Tr, _Alloc> _Str;
typename basic_string<_Elem, _Tr, _Alloc>::size_type _Pos;
_Str.reserve(_Bits);

for (_Pos = _Bits; 0 < _Pos; )
if (test(--_Pos))
_Str += _E1;
else
_Str += _E0;
return (_Str);
}


而这个代码是在bitset类模板中to_string的代码,那么由此推测,个人认为:前面的的bs.template是告诉编译器调用bitset类模板中to_string的函数进行输出吧。

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧