В Java мы можем сделать что-то вроде этого:
ArrayList arrayList = new ArrayList<String>();
// Notice that String is not mentioned in the first declaration of array
КАК ОПАСНО
ArrayList<String> arrayList = new ArrayList<String>();
Как мы можем что-то подобное в C++?
Не так, как вы писали.
Что вы можете сделать, это одно из следующего, в зависимости от того, что вы на самом деле пытаетесь выполнить:
auto
для автоматической адаптации к типу: auto = new ArrayList<String>();
, Это не дает вам полиморфизма, но это избавляет вас от ввода имени с левой стороны.Вот пример второго подхода:
class IArrayList // define a pure virtual ArrayList interface
{
// put your interface pure virtual method declarations here
};
template <typename T>
class ArrayList : public IArrayList
{
// put your concrete implementation here
};
Тогда вы можете сказать в своем коде:
IArrayList* arrayList1 = new ArrayList<string>();
IArrayList* arrayList2 = new ArrayList<double>();
...и так далее.
IArrayList
. По необходимости либо пустой интерфейс, либо интерфейс, который перемещает проверку типов во время выполнения, т. Е. Противоположно тому, что требуется от шаблона класса.
В c++, вы не можете использовать vector array = new vector<string>()
, но в c++ 11, вы можете использовать auto
ключевое слово: auto p = new vector<string>()
, это так же, как vector<string> *p = new vector<string>()
Надеюсь, что мой ответ может вам помочь.
std::vector<std::string> array;