【发布时间】:2012-08-30 17:50:25
【问题描述】:
我有一个内存分配器,它为一个对象分配内存并使用任何给定的参数调用它的构造函数,见下文。
// 0 args to constructor
template <class T>
inline T* AllocateObject() { return new (InternalAllocate(sizeof(T), alignof(T))) T(); }
// 1 args to constructor
template <class T, typename arg0>
inline T* AllocateObject(const arg0& a0) { return new (InternalAllocate(sizeof(T), alignof(T))) T(a0); }
template <class T, typename arg0>
inline T* AllocateObject(arg0& a0) { return new (InternalAllocate(sizeof(T), alignof(T))) T(a0); }
// 2 args to constructor
template <class T, typename arg0, typename arg1>
inline T* AllocateObject(arg0& a0, arg1& a1) { return new (InternalAllocate(sizeof(T), alignof(T))) T(a0,a1); }
template <class T, typename arg0, typename arg1>
inline T* AllocateObject(const arg0& a0, arg1& a1) { return new (InternalAllocate(sizeof(T), alignof(T))) T(a0,a1); }
template <class T, typename arg0, typename arg1>
inline T* AllocateObject(arg0& a0, const arg1& a1) { return new (InternalAllocate(sizeof(T), alignof(T))) T(a0,a1); }
template <class T, typename arg0, typename arg1>
inline T* AllocateObject(const arg0& a0, const arg1& a1) { return new (InternalAllocate(sizeof(T), alignof(T))) T(a0,a1); }
//.........
如您所见,调用次数随着参数数量的增加而迅速增长。我必须为每个参数交替使用“const”和“non-const”,以确保它与我通过的任何参数都能正常工作。 (特别是能够通过引用传递以及通过值传递)
有没有比重复这个方案更好的方法来执行相同的任务?基本上我正在研究最大 8-10 个参数之类的东西,我觉得它不太可行。
谢谢
【问题讨论】:
-
如果您从不更改参数,只需使用
const type &一次处理所有 4 个版本。 -
C++11 适合您吗?它包含针对这个确切问题非常具体的语言更新。编辑:好吧,您使用的是
alignof,我为没有仔细阅读而感到羞耻。 :) FireRain 的回答正是我所暗示的。 -
不幸的是,C++11 不是一个选项
-
你能举个例子吗?
-
还有 - 如果对象的 c 构造函数可能会更改参数,那将如何工作?
标签: c++ templates memory-management