iki nesne arasındaki karşılaştırma yapabilmek için ihtiyacı olan bir sınıf şablonu sahip şablon türleri zorlamak özel bir sınıf ile bu derlemeye çalıştığınızda birsahip olmadığı, ancakŞartlı ben bir <code>Compare</code> sınıfından türetilen karşılaştırma nesneleri ile, C++
template<typename A, typename B>
class Default : public Compare<A,B> {
public:
bool eq(const A& a, const B& b) const { return a==b; }
};
private:
Compare<T,T>* comparison_object;
bool uses_default;
Container() : comparison_object(new Default<T,T>()), uses_default(true) {}
Container(Compare<T,T>& cmp) : comparison_object(&cmp), uses_default(false) {}
~Container() { if(uses_default) delete comparison_object; }
};
: varsayarak tip T
operatörü ==
sahiptiraşırı yük (I Compare
türetilmiş bir nesne sağlamak bile):
MyObjCmp moc;
Container<MyObj>(&moc);
derleyici operatör var olmadığını yakınır:
error: no match for 'operator==' (operand types are 'const MyObj' and 'const MyObj')
Bu mantıklı, Default
sınıf hala gerektiğinden İhtiyacım olmasa bile oluşturulsun. Ama şimdi bir geçici çözümüme ihtiyacım var ...
Herhangi bir fikrin var mı? bir boş gösterici bir çalışma zamanı çek, hiçbir nesne için bir derleme zamanı çek kullanabilirsiniz yerine
'Karşılaştır * comparison_object;' Bellek sızıntısına neden olur. Lütfen "new"/'delete 'yerine' std :: unique_ptr' veya' std :: shared_ptr' komutunu kullanın. –
ikh
Benim destroy'um ilgilenir ... "default_created" bir boole bayrağı ve koşullu silme Endişelenme :) – Dori
@Niall, Düzenleyeceğim ... Olumsuz olduğunu düşündüm – Dori