У меня есть шаблон класса, которому можно передать Класс или Указатель класса .
/* Template specialization hack to determine if type is a pointer */
struct type_true { };
struct type_false { };
template <class PRT>
class is_pointer : public type_false {
};
template <class PRT>
class is_pointer <PRT * > : public type_true {
};
template <typename T>
class MyClass {
//Return an new instance allocated on stack
T new_instance(type_false n_ptr) {
T new_obj;
//Init stuff
return new_obj;
}
//Return an new instance allocated on heap
T new_instance(type_true is_ptr) {
T new_obj = new T();
//Init stuff
return new_obj;
}
};
Компиляция завершается со следующей ошибкой:
cannot convert 'Class**' to 'Class*' in initialization
Я думаю, это потому, что T уже является указателем new T()
думает, что я хочу выделить указатель на указатель. например,
OtherClass * new_obj = OtherClass*new();
Есть ли какой-нибудь способ, которым я могу лишить * типа T или другого решения?
Спасибо
Ben