C++ (Qt)#include <vector>#include <list>#include <iostream> template<class T>class vec{public: vec() { std::cerr << "vec::vec( T )" << std::endl; } std::vector<T> m_mem;}; template<>class vec<char*>{public: vec() { std::cerr << "vec::vec( char * )" << std::endl; } std::list<char*> m_mem;}; int main( int, char ** ){ vec<void*> buf1; vec<int*> buf2; vec<char*> buf3; return 0;}
C++ (Qt)namespace std{ template<>class vector<char*>{public: vector() { std::cerr << "vec::vec( char * )" << std::endl; } std::list<char*> m_mem;}; }
const bool is_compatible_containers = std::is_same< _SourceContainerTemplate<_SourceItem, _SourceAlloc> , _DestContainerTemplate<_SourceItem, _SourceAlloc>>::value
class Contaier;class Item{public: Container* container() { return container_; } private: Container* container_;}class Container{public: vector<Item*> items() { return items_; } protected: void addItem(Item* item) { ... items_.push_back(item); } private: vector<Item*> items_;}class MyContainer;class MyItem : public Item{public: MyContainer* container() { return static_cast<MyContainer*>(Item::container()); }}class MyContainer : public Container{public: // ну а как вы поступите здесь с Container::items()? vector<MyItem*> items() { return ??? } void addItem(MyItem* item) { Container::addItem(item); }}
// ну а как вы поступите здесь с Container::items()? vector<MyItem*> items() { return ??? }
C++ (Qt) vector<MyItem*> items() { return (vector<MyItem*> &) Container::items(); } // Waring: HACK