Я знаю, что функция может проходить через аргумент template
, могу ли я передать класс Constructor следующим образом.Пропустить класс Конструктор через аргумент шаблона в C++
Update: Вся причина, по которой я хочу, чтобы это сделать, это я могу выбрать конструктор в пуле памяти и без какого-либо кода, изменяющегося в классе я хочу Alloc (в данном случае 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)>();
'A()' в шаблоне аргумента обозначает тип функции, не принимая никаких аргументов и возвращает 'Ā'. – Xeo
Не могли бы вы предоставить еще несколько контекстов? Учитывая только эту небольшую информацию, я бы спросил себя: почему бы не использовать 'new A()' непосредственно вместо 'new_func '? Иными словами, что вы покупаете 'new_func'? Снимает ли он абстрактное строительство? – Andre
@Andre Причина в том, что я хочу использовать его в пуле памяти, чтобы я мог malloc класс с выбором конструкции – xucheng