2013-05-28 97 views
3

我已經做了計算器和谷歌初步搜索,並沒有發現任何這特定的鉛,所以我要在這裏問它:來自Boost.Function與自定義分配器

有沒有人有experienece使用boost ::函數與自定義分配器?

我需要它,因爲我使用從bind生成的函數,並且在一定的大小(取決於你綁定的參數)後,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的編輯器一起工作...編輯器不會讓我再次編輯。 :(

回答

2

從我可以告訴,這並不重要。本課程將內部與函數模板分配器重新綁定您分配給它無論如何需要的類型。

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(...));