ошибка с vector push_back

187
18 июля 2018, 07:30

Есть 2 класса А и В нужно создать контейнер отдельно для каждого класса через метод create который template котрый заполняет контейнер типом в зависимости от параметера которого передали

    template <typename T>
vector<T> create(tring tipe)
{
  vector<T>test;
  if (tipe == "a")
  {
    test.push_back(A());
  }
  if (tipe == "b")
  {
    test.push_back(B());
  }
   return test;
}
void d()
{   
  vector<A>a;   
  vector<B>b;    
  a = create<A>("a");
  b = create<B>("b");
}   

при билде такая ошибка 'void std::vector<А,std::allocator<_Ty>>::push_back(_Ty &&)': cannot convert argument 1 from 'А' to 'const В &'

как это решить?

Answer 1

Тут проблема в том, что тип элемента, который можно положить в вектор, задается параметром шаблона T на этапе компиляции, а не строкой на этапе выполнения. Соответственно создать вектор с одним элементом куда проще:

template <typename T>
vector<T> create(void)
{
   vector<T> test{};
   test.push_back(T{});  
   return test;
}
Answer 2

Может так?

#include <vector>
struct A {};
struct B {};
template<typename T>
std::vector<T> Create(const T& o)
{
    std::vector<T> ret{o};
    return ret;
}
int main()
{
    std::vector<A> vA = Create(A{} );
    std::vector<B> vB = Create(B{} );
    return 0;
}
READ ALSO
синтаксический аналог memcpy

синтаксический аналог memcpy

помогите сделать без memcpy то же самое:

179
ESP8266 SPI slave mode interrupt (Arduino IDE)

ESP8266 SPI slave mode interrupt (Arduino IDE)

Есть необходимость запустить аппаратный (желательно) SPI в режиме slave на ESP12f (ESP8266)SPI0 используется для доступа к флешке - его не трогаем

327
Имя интернет сети с++

Имя интернет сети с++

Как узнать имя интернет сети к которой подключен компПодключен ли интернет проверяю так:

176
Создание статических ссылок для Apache Tomcat

Создание статических ссылок для Apache Tomcat

Создал сервер под Tomcat, задача которого помещать определенные xml в очередь сообщенийВыбор xml'я реализовал в соответствующем классе в зависимости...

211