模板模板参数与boost :: fast_pool_allocator

时间:2014-06-02 13:56:15

标签: c++ templates boost

为什么不编译:

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的定义中,它需要四个非默认的模板参数,但在上面的例子中它可以正常工作。有人可以解释一下这个原因吗?谢谢!

1 个答案:

答案 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>来完全指定它。