我有一個類模板,為其成員支持不同的分配器:
template<typename Alloc>
class Foo
{
std::vector<int, Alloc<int>> data;
// other members ...
};
考慮一個func接受 a的函式const Foo&。由于分配器是Foo's 型別的一部分,我還需要將其宣告為模板:
template<typename Alloc>
void func(const Foo<Alloc>& foo);
在我的理解中,當只查看const Foo&分配器時并不重要,因此所有的實體化func都是相同的。除了代碼膨脹之外,這還引入了不需要的依賴項。
- 有沒有辦法
func不知道分配器? std::allocator在函式(然后不再需要是模板)中使用一個分配器(例如)并在呼叫它時執行reinterpret_castfromFoo<MyCostumAllocator<int>>toFoo<std::allocator<int>>是否安全?
我知道std::pmr::polymorphic_allocator哪個不會遇到這個問題(只要你只使用 pmr 分配器),但這對我來說不是一個選擇。
uj5u.com熱心網友回復:
你看到的問題func是次要的。的不同實體Foo是完全不同的不同型別。因此,不同的實體化也func必須是不同的函式。
但是,如果 的介面Foo不依賴于分配器,則可以添加一個分配器不知道的基類:
struct Foo_base {
// virtual interface
};
template <typename Alloc>
struct Foo : Foo_base {
std::vector<int, Alloc<int>> data;
};
void func(const Foo_base& foo);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/326453.html
上一篇:c 部分模板特化,帶有require陳述句:錯誤:類Bar<T>中'foo'的外定義定義,沒有定義
下一篇:C 何時在模板定義中衰減
