3

我在stackoverflow和google上做了初步搜索,并没有找到任何具体的线索,所以我要在这里问它:

有没有人有使用自定义分配器的 boost::function 的经验?

我需要它,因为我正在使用从绑定生成的函数,并且在一定大小之后(取决于您绑定的参数),boost::function 将开始在堆上分配。

我必须使用 boost/pool_alloc。boost::fast_pool_allocator<>或者boost::pool_allocator<>说具体点。接收函数签名很简单,就是function<void()>,但我可以从各种绑定站点生成这个函数,并带有所有可能的参数来绑定......

那我怎么知道为 pool_alloc 写什么签名呢?例如:

function<void()> f_with_alloc(bind(...), pool_allocator<????>() );

我在那里写什么?boost.function 文档并不清楚。

呃,有些模板代码在stackoverflow的编辑器上不能很好地工作......而且编辑器不会让我再次编辑。:(

4

2 回答 2

2

据我所知,没关系。无论如何,该类将在内部将您的分配器重新绑定到它需要的类型。

于 2013-05-28T13:10:18.450 回答
1

function::assign()在函数模板中使用带有分配器的成员函数。

template <class F, class G>
void assign(F& f, G g)
{
  f.assign(g, pool_allocator<G>());
}

boost::function<void()> f;
assign(f, bind(...));
于 2013-05-28T14:12:01.373 回答