我希望能够在编译时强制执行特定类型只能用于创建具有自动存储持续时间的对象。
template<typename T, typename Alloc>
struct Array
{
T* data; // owned resource
Array(std::size_t size); // allocates via Alloc
~Array(); // deallocates via Alloc
};
typedef Array<int, AutoAllocator<int>> AutoArray;
void foo(AutoArray a) // ok
{
AutoArray l = AutoArray(); // ok
static AutoArray s; // error
new AutoArray(); // error
std::vector<AutoArray> v(1); // error
}
对此的应用将能够为 的实例所拥有的资源选择最佳分配策略AutoArray
。这个想法是具有自动存储持续时间的对象所需的资源分配模式与 LIFO 资源分配器兼容。
我可以使用什么方法在 C++ 中实现这一点?
编辑:次要目标是允许Array
通过放入其中一个AutoAllocator
或 default来透明地切换分配策略std::allocator
。
typedef Array<int, std::allocator<int>> DynamicArray;
假设有大量代码已经使用DynamicArray
.