関数が引数を渡すことができることは知っていますが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)>();