【发布时间】:2014-07-04 05:16:54
【问题描述】:
根据http://en.cppreference.com/w/cpp/concept/Allocator,一个可以用作分配器类型的类必须满足许多要求。但是,我找不到 C++ 标准规定的相同要求。标准只要求分配器类型不能是非类类型。 (见 n3797 20.7.8.1)
如果我有一个空类Alloc 和一个完全专业化的std::allocator_traits<Alloc>,我可以使用Alloc,如下所示:
#include <vector>
struct Alloc {};
template<>
std::allocator_traits<Alloc>
{
// full of definitions as per the requirements for std::allocator_traits<T>
};
int main()
{
std::vector<int, Alloc> coll;
coll.push_back(8);
}
【问题讨论】:
-
你可以做到(大多数情况下;你仍然需要提供
operator ==等),但我看不出你从中获得了什么,因为你必须重新实现专业化而不是依赖默认值。
标签: c++ memory-management standards typetraits allocator