[英]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.