为什么不编译:
std::map<int, int, std::less<int>, boost::fast_pool_allocator< std::pair< int, int > > a_Test;
但是编译得很好:
typedef boost::fast_pool_allocator< std::pair< int, int > > fast_alloc;
std::map<int, int, std::less<int>, fast_alloc > a_Test;
一个单独的问题:据我所知,在boost::fast_pool_allocator
的定义中,它需要四个非默认的模板参数,但在上面的例子中它可以正常工作。有人可以解释一下这个原因吗?谢谢!
答案 0 :(得分:2)
您的定义应为
std::map<
int,
int,
std::less<int>,
boost::fast_pool_allocator<
std::pair< int, int >
>
> a_Test;
您应始终使用其参数在单独的行上格式化较长的模板实例。这样你就不会错过关闭括号。
boost::fast_pool_allocator
使用poolfwd.hpp
中的默认模板参数进行前向声明。
只是为了澄清命名约定:allocator参数不是模板模板参数,因为您通过将其类型设置为std::pair<int, int>
来完全指定它。