簡體   English   中英

自定義分配器兼容性

[英]Custom allocator compatibilty

給定以下功能簽名

void foo(std::vector<int> &bar);

和一個自定義分配器CustomAlloc ,使用std::vector<int, CustomAlloc>的實例調用foo會導致

could not convert ‘bar’ from ‘std::vector<int, CustomAlloc<int, [...] >}’ to ‘std::vector<int>’

我不是C ++模板專家,如果我錯了,請糾正我,但我的理解是std::vector<int>默認為std::vector<int, std::allocator<int> > (gcc 7.1.1。 -3),因此定義了完全不相關的類型。


這只蜜蜂說我正在嘗試找到一些解決方案,使使用std::vector<int, CustomAlloc> foo可調用std::vector<int, CustomAlloc>並附帶以下內容。

template<typename Allocator>
void foo(std::vector<int, Allocator> &bar);

我不喜歡分配器規范如何傳播模板,但是我想這就是STL的工作方式。

所以我的問題是,鑒於foo特別是在int運行,您將如何解決這個問題?

PS:為不好的頭銜表示歉意,我只是找不到一個好頭銜

標准中有一個用於解決此問題的全新命名空間- namespace pmr 請參見polymorphic_allocator:何時以及為什么要使用它?

關於在沒有pmr解決方案的情況下可以采取哪些措施避免模板傳播此問題。 答案是您不能這樣做,您需要硬指定分配器參數,或者需要對向量進行模板處理以接受任何類型的分配器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM