C++中的动态类类型

use*_*001 0 c++ dynamic

我正在用C++编写一个内存管理器 - 也就是说,一个从堆中分配大量字节的类,然后为我的程序分配和释放函数.

void* allocate(int size);
void deallocate(void*, int size);
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我不喜欢它是我需要这样做才能使用它:

CClass* myobject = (CClass*) manager->allocate(sizeof(CClass));
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,有没有办法将类类型传递给函数而不是使用void指针?这将消除对cast和sizeof调用的需要,并且还可以消除将对象大小传递给deallocate函数的需要.

有没有人知道我可以这样做的更好方法?

Vla*_*lad 5

您可以使用模板功能.

简化示例:

#include <string>
#include <iostream>
using namespace std;

template<typename T>
T* allocate() {
  return (T*) malloc(sizeof(T));
}

int main() {
  int *s = allocate<int>();
  *s = 42;
  return *s;
}
Run Code Online (Sandbox Code Playgroud)