Это странный вариант. Обратите внимание, что это сокращает пример кода и упускает деструкторы сознательно).const указатель как аргумент конструктора
template <class f, class g> class Ptr;
class RealBase
{
};
template <class a, class b, class c = Ptr<a,b> >
class Base : public RealBase
{
public:
Base(){};
};
template <class d, class e>
class Derived : public Base <d,e>
{
public:
Derived(){};
void DerivedMethod(){};
};
typedef Derived<double,double> D_Derived;
template <class f, class g>
class Ptr
{
public:
Ptr(){};
Ptr(Base<f,g,Ptr<f,g> >* a){in = a;};
Base<f,g,Ptr<f,g> >* operator->()
{
return in;
};
Base<f,g,Ptr<f,g> >& operator*()
{
return *in;
};
private:
Base<f,g,Ptr<f,g> >* in;
};
Я использую класс Ptr из этого примера в векторе как указатель на класс Derived.
Как мы видим, Ptr принимает Base<>*
как аргумент конструктора.
К сожалению, мне нужен конструктор, который принимает константный Base <> *, и я просто не могу это сделать:
Ptr(const Base<>* a) { in = const_cast<Base<>*>(a)};
Любые идеи, как я могу сделать этот класс принять const Base<>*
, как это конструктор?
Edit:
Хорошо, получается, что я могу это исправить путем внесения изменений в несвязанный код, так что это немного не-проблема сейчас =] У меня ушел около дня, чтобы исправить это, хотя = [
вы потерял меня в «не уныне или что-то еще». –
Приношу свои извинения. В прошлый раз, когда я опубликовал код примера вырезания, какой-то парень продолжал рассказывать о том, как у меня не было виртуальных деструкторов. –