Tek bir ortak arabirim sağlamak için genel bir kapsayıcı türü oluşturmaya ve değiştirmeye tabi oldukları için kullandığım iç kapsayıcıları gizlemeye çalışıyorum.C++ 'da Genel Kapsayıcı
Temel olarak, öğe koleksiyonlarını döndüren eklentilerim var ve eklentilerin kodun kullandığı kapsayıcı türünün farkında olmasını istemiyorum.
kimse daha sonra daha iyi bir yönde aşağıdaki örnek kodda işaret edebilir?
template<class C, typename I>
class Container
{
public:
//...
void push(const I& item)
{
if(typeid(C) == typeid(std::priority_queue<I>))
{
std::priority_queue<I>* container = (std::priority_queue<I>*)&_container;
container->push(item);
}
if(typeid(C) == typeid(std::list<I>))
{
std::list<I>* container = (std::list<I>*)&_container;
container->push_back(item);
}
else
{
//error!
}
};
private:
C _container;
//...
}
teşekkürler "ortak bir arayüz" yazdı
. Bunu yapma. Uygulamanızı tasarlarken zamanınızı harcayın, böylece statik olarak yazılan kapsayıcılar kullanır. – ybungalobill
Daha iyi yönde işaret edebilir, emin: ** ** bunu yapmak çalışmayın. Ciddi anlamda. Sana hiçbir şey kazandırmayacak. Burada konuşan deneyimin sesi. –
Neden burada düşüş var? Bu gayet meşru bir soru. Cevap “bu şekilde yapma” olsa bile, hala geçerli bir soruydu. – Tim