Я знаю, что функция может проходить через аргумент template
, могу ли я передать конструктор класса следующим образом.
Обновление: Вся причина, по которой я хочу это сделать, заключается в том, что я могу выбрать конструктор в пуле памяти и без какого-либо изменения кода в классе, который я хочу выделить (в данном случае 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()
в аргументе шаблона обозначает тип функции, не принимающей аргументов и возвращающейA
. - person Xeo   schedule 07.01.2012new A()
напрямую вместоnew_func<A, A()>
? Иными словами, что вам даетnew_func
? Он абстрагируется от построения? - person Andre   schedule 07.01.2012pool.classMalloc<A>();
иpool.classMalloc<A>(1);
? На самом деле это было бы довольно легко сделать. - person Aaron McDaid   schedule 08.01.2012