Q:

c++: шаблон из объекта

Здравствуйте!
Есть несколько классов:
class Base {
    Base *createObject() {
        return new Base();
    }
    ...
}

class A : public Base {
    ... 
}

class B : public Base {
    ... 
}

template <class T> class BaseHolder {
     BaseHolder();
}

Так вот, в классе Base мне нужно создать объект типа BaseHolder с template равному типу класса, в котором это происходит. То-есть, если я создаю объект типа BaseHolder в классе A, я получу:
 BaseHoler holder = BaseHolder <A> ();

A в классе B соответсвенно:
 BaseHoler holder = BaseHolder <B> ();

Как реализовать?
Update
Вместо строчки return new Base(); нужно вернуть объект типа, в котором вызывается метод. То-есть, при вызове метода createObject() у объекта типа А, будет возвращен новый объект типа A;

A:

Вы хотите что-то такое?
template <class T>
class BaseHolder {
public:
    BaseHolder(){}
};

class Base {
};

class A : public Base {

public:
    A() = default;
    BaseHolder<A> holder;

};

class B : public Base {

public:
    B() = default;
    BaseHolder<B> holder;

};

int main(int argc, const char * argv[])
{
    A a;
    B b;
}

Если нет - поясните подробнее и понятнее, что вам нужно...
Update После уточнения в комментарии - посмотрите вот это:
template <class T>
class BaseHolder {
public:
    BaseHolder(){}
};

template <class T>
class Base {
    BaseHolder<T> holder;
};

class A : public Base<A> {

public:
    A() = default;

};

class B : public Base<B> {

public:
    B() = default;

};

int main(int argc, const char * argv[])
{
    A a;
    B b;
}

Update2 Если и это не то, что надо - удаляю ответ. Когда нет нормального ТЗ, получается ХЗ...
class Base {
public:
    Base *createObject() {
        return new Base();
    }

};

class A : public Base {

public:
    A() = default;
    Base *createObject() {
        return new A();
    }

};

class B : public Base {

public:
    B() = default;
    Base *createObject() {
        return new B();
    }

};

