Я знаю, что функция может проходить через template
аргумент, могу ли я передать класс Constructor следующим образом.
Обновление:
Причина, по которой я хочу это сделать, заключается в том, что я могу выбрать конструктор в пуле памяти и без каких-либо изменений кода в классе, который я хочу выделить (в данном случае class A
)
class A
{
public:
A(){n=0;}
explicit A(int i){n=i;}
private:
int n;
};
class MemoryPool
{
public:
void* normalMalloc(size_t size);
template<class T,class Constructor>
T* classMalloc();
};
template<class T,class Constructor>
T* MemoryPool::classMalloc()
{
T* p = (T*)normalMalloc(sizeof(T));
new (p) Constructor; // choose constructor
return p;
}
MemoryPool pool;
pool.classMalloc<A,A()>(); //get default class
pool.classMalloc<A,A(1)>();