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又表達了什么意思
uj5u.com熱心網友回復:
樓主,在 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的函式進行輸出吧。
uj5u.com熱心網友回復:
的確是這樣,只是這種語法從來沒遇到過,感覺template和后面的tostring應該用括號包含起來,不然太難理解了
uj5u.com熱心網友回復:
這里面bs.template to_string<char,char_traits<char>,allocator<char> >()這個語法看不懂================
bs是個物件
呼叫to_string這個函式
這個函式是個模板函式
是書上的一個例子。
uj5u.com熱心網友回復:
呵呵,bs.template是個提示符,暗示呼叫的是模板類std::bitset<N>的成員函式to_stringuj5u.com熱心網友回復:
如果沒有.template,編譯器無法得知緊跟其后的"<"代表的是個template argument list的起始,而非一個"小于"符號。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/76014.html
標籤:C++ 語言
上一篇:為啥我函式的回傳值一直是0
下一篇:codeblocks使用求助
