MyCustomMap map;
Возможно ли это?
Краткий ответ: нет.
Длинный ответ: если вы передадите какой-то аргумент конструктору
MyCustomMap map{1, "one"};
, возможно вывести int
для T
и char const [4]
для V
.
Но, к сожалению, только начиная с C ++ 17;взгляните на эту страницу для получения дополнительной информации.
Но если вы не передадите аргументы конструктору, вы не сможете вывести аргументы.
РЕДАКТИРОВАТЬ
Точный ОП
// The main goal is to call Insert one after another with different data types
map.Insert(1, "Test");
map.Insert("Test2", 2);
Извините: я неправильно понял ваш вопрос.
Но ответ остается: нет.
C ++ - это скомпилированный и строго типизированный язык.
И шаблонный класс не является классом: это набор классов.
Когда вы создаете экземпляр объекта
MyCustomMap map;
этот объект (map
, в данном случае) должен быть объектом точного типа;известна компилятору во время компиляции в этой точной позиции.
Таким образом, вы не можете создать экземпляр map
типа, обычно MyCustomMap
.Вы должны выбрать пару типов.Может быть, со значениями по умолчанию, может быть вывод типа через аргументы конструктора, возможно использование типа auto
и использование типа, возвращаемого функцией, но вы должны выбрать тип при объявлении переменной.Не после.
И, во всяком случае, если вы хотите
map.Insert(1, "Test");
map.Insert("Test2", 2);
, вам нужен современный объект двух разных типов.
В этом что-то естьнаправление в C ++ 17: ищите std::any
и std::variant
.Но не такой гибкий.