C++ C++;03带有变量和类型的宏定义?
我试图通过添加宏来简化库。我一直在阅读有关宏可以完成的所有不同的事情,但是没有实现我想要的工作方式 我编写了一个内存管理器,它将与placement新特性一起使用。它跟踪分配的内容以及它在预分配空间中的位置 理想情况下,我想写以下内容:C++ C++;03带有变量和类型的宏定义?,c++,templates,macros,c++03,C++,Templates,Macros,C++03,我试图通过添加宏来简化库。我一直在阅读有关宏可以完成的所有不同的事情,但是没有实现我想要的工作方式 我编写了一个内存管理器,它将与placement新特性一起使用。它跟踪分配的内容以及它在预分配空间中的位置 理想情况下,我想写以下内容: MyClass* c = New(mem) MyClass(3); // use memory manager instance 'mem' and constructor 'MyClass(int)' 并将其翻译为: MyClass* c = new (me
MyClass* c = New(mem) MyClass(3); // use memory manager instance 'mem' and constructor 'MyClass(int)'
并将其翻译为:
MyClass* c = new (mem.Reserve<MyClass>()) MyClass(3);
MyClass* c = new (mem.Reserve<MyClass>(33)) MyClass[33];
翻译为:
MyClass* c = new (mem.Reserve<MyClass>()) MyClass(3);
MyClass* c = new (mem.Reserve<MyClass>(33)) MyClass[33];
MyClass*c=new(mem.Reserve(33))MyClass[33];
Reserve(SIZE)
方法是管理内部参数的方法。它在由mem
管理的预分配内存中保留(sizeof(TYPE)*(SIZE))
字节,并将起始地址指针返回到新函数
对于宏来说,这是可行的操作吗?还是有更好的方法来解决这个问题
我仅限于C++03标准,因为这是我的ARM编译器支持的
我感谢任何建议和例子,以帮助我更好地理解这一点!
谢谢 以下内容可能会有所帮助:
#define New(mem, Type) new (mem.Reserve<Type>()) Type
#define NewArray(mem, Type, Size) new (mem.Reserve<Type>(Size)) Type[Size]
#定义新(mem,Type)新(mem.Reserve())类型
#定义新数组(mem,Type,Size)新(mem.Reserve(Size))类型[Size]
像这样使用它:
MyClass* c = New(mem, MyClass)(3); // new (mem.Reserve<MyClass>()) MyClass(3);
MyClass* c = NewArray(mem, MyClass, 33); // new (mem.Reserve<MyClass>(33)) MyClass[33];
MyClass*c=New(mem,MyClass)(3);//新的(mem.Reserve())MyClass(3);
MyClass*c=NewArray(mem,MyClass,33);//新(成员储备(33))MyClass[33];
可能定义新的
void*运算符(大小、内存管理器和内存)
可能也有帮助(如果保留
使用MyClass
只知道它的大小)。我不这么认为。宏知道的一切都在()
中,而::运算符new
在任何情况下都不知道要传递的类型。因此,宏无法找到请求内存的对象的类型/范围。为什么不简单地使用该函数呢<代码>MyClass*c=mem.Reserve(33)代码>我有一个运行placement New函数的函数“mem.New(SIZE)”。我的问题是,我只能硬编码默认构造函数。我需要能够调用任何构造函数,所以我的想法是消除新函数,让用户直接使用placement New。或者对使用参数的New
进行更多重载?(您可能也需要可变参考版本,但这可能会很快变得笨拙,除非您有像boost这样的crafy技术)