Как правило, downcast std :: map, содержащий любое значение шаблона - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу разработать код, в котором мы можем хранить переменную шаблона в структуре карты шаблона. Я когда-то исследовал и увидел, что если мы хотим создать некоторую карту для хранения переменной шаблона, мы должны сначала реализовать с BaseClass, который не является шаблоном. Я могу добиться этого, но с другой стороны я не нашел, как вернуть это обратно из этой карты, так как у нас нет информации о типах, которые содержит шаблон.

Код, который выполняется как это ..

public ref class BaseClass{
   //some data members as public.
}

template <class TypeA= ClassA,class TypeB= ClassB>
public ref class MainClass: public BaseClass{        
public: 
        DataType<TypeA, TypeB> ^ m_data; //this DataType class is also template type taking class TypeA= ClassA,class TypeB= ClassB
};

class SomeClass{
   cliext::map<System::String^, BaseClass<>^>^ m_map;
   void Setter()
   {
      DataType<TypeA, TypeB> ^ var = gcnew DataType<AType>();
      m_map["AType"] = var ;
      DataType<TypeA, TypeB> ^ var1 = gcnew DataType<AType, BType>();
      m_map["AType_BType"] = var1 ;
   }
   //not sure how to design the getter()
   void CalculateStuff(SystemString^ str){
       BaseClass^ b = m_map[str];
       //Not not sure how to get m_data from it, as I am not sure how to downcast dynamically
   }
}

Я не хочу использовать любую другую библиотеку, как Boost. Я немного новичок в CPP / CLI и шаблон. Может ли кто-нибудь помочь мне, как мы можем достичь этого

...