私は関数がtemplate
引数を通過できることを知っています。このようなクラスコンストラクタを渡すことはできますか?PassクラスC++でのテンプレート引数によるコンストラクタ
更新: 私はこれをしたい全体の理由は、私が(この場合はclass A
で)のallocに私がしたいクラスに変更
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'を返す、関数型を表しています。 – Xeo
もう少し文脈を教えてください。この小さな情報しか与えられなかったので、私は自分自身に尋ねるでしょう: 'new_func 'の代わりに 'new A()'を直接使わないのはなぜですか?別の言い方をすると、 'new_func'があなたを買うのは何ですか?それは建設を抽象化していますか? – Andre
@Andreなぜなら私はメモリプールでそれを使ってクラスをmallocできるからです。 – xucheng