Есть 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 В &'
как это решить?
Тут проблема в том, что тип элемента, который можно положить в вектор, задается параметром шаблона T
на этапе компиляции, а не строкой на этапе выполнения. Соответственно создать вектор с одним элементом куда проще:
template <typename T>
vector<T> create(void)
{
vector<T> test{};
test.push_back(T{});
return test;
}
Может так?
#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;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть необходимость запустить аппаратный (желательно) SPI в режиме slave на ESP12f (ESP8266)SPI0 используется для доступа к флешке - его не трогаем
Как узнать имя интернет сети к которой подключен компПодключен ли интернет проверяю так:
Создал сервер под Tomcat, задача которого помещать определенные xml в очередь сообщенийВыбор xml'я реализовал в соответствующем классе в зависимости...