代码:
template<int N>
void printBitset(std::bitset<N> const& bs)
{
std::cout<<bs.template to_string<char,char_traits<char>,allocator<char> >();
}
能在DevCPP里编译通过,那个.template的意思就是告诉编译器,紧跟to_string的<并不是一个小于号,而是模板参数;需要这个 template修饰的地方(.或者->)是当前正处在一个模板中,前面的bs还未具现,它是一个模板函数里的某个参数,所以编译器是不知道它是什么东西的,如果你具现了,比如std::bitset<100> bs;那就不需要再加.template了。这和typename的第二个重要用法是一样的,用以申明模板中的参数的内嵌类型是一个类型,而不是静态变量。
双重模板是在模板参数中再用模板,比如
template <typename T,template <typename> class CONT >
stack{...};
不是所有编译器都支持这个较后增加的C++特性,当然你需要在这个类里面形式化的具现这个模板模板参数,像CONT<T>...。
评论