У меня есть производный класс, который является очень тонкой оболочкой вокруг базового класса. В принципе, у меня есть класс, у которого есть два способа сравнить его в зависимости от того, как вы его интерпретируете, поэтому я создал новый класс, который происходит из базового класса и имеет только новые конструкторы (которые просто делегируют базовому классу) и новый operator==
. То, что я хотел бы сделать, это перегрузить operator Base&()
в классе Derived, поэтому в тех случаях, когда мне нужно интерпретировать его как базу.оператор литья в базовый класс в классе производной тонкой оболочки
Например:
class Base
{
Base(stuff);
Base(const Base& that);
bool operator==(Base& rhs); //typical equality test
};
class Derived : public Base
{
Derived(stuff) : Base(stuff) {};
Derived(const Base& that) : Base(that) {};
Derived(const Derived& that) : Base(that) {};
bool operator==(Derived& rhs); //special case equality test
operator Base&()
{
return (Base&)*this; //Is this OK? It seems wrong to me.
}
};
Если вы хотите простой пример того, что я пытаюсь сделать, притворяться, что я имел класс String, и String==String
типичный характер по сравнению характера. Но я создал новый класс CaseInsensitiveString
, который сделал нечувствительное к регистру сравнение на CaseInsensitiveString==CaseInsensitiveString
, но во всех остальных случаях просто вел себя как строка. он даже не имеет новых членов данных, просто перегружен operator==
. (Пожалуйста, не говорите мне использовать std :: string, это просто пример!)
Я иду об этом праве? Что-то кажется подозрительным, но я не могу на него наложить.
Я надеюсь, что в вашем фактическом коде у вас есть виртуальный деструктор. –