Ошибка задачи компиляции: нет подходящего конструктора для инициализации 'std :: vector'
База кода, которую я создаю, содержит несколько объектов, которые не обязательно должны быть параметрами шаблона переменной. Я хотел, чтобы они приняли вектор std :: any. Мои объекты названы в честь сущностей HTML, таких как H1, H2, PARAGRAPH.
Интерфейс для создания объекта.
template <class TYPE>
auto _createElement(const std::vector<std::any> &attrs) -> TYPE & {
std::unique_ptr<TYPE> e = std::make_unique<TYPE>(attrs);
ViewManager::elements.push_back(std::move(e));
return static_cast<TYPE &>(*ViewManager::elements.back().get());
}
template <class TYPE, typename... ATTRS>
auto createElement(const ATTRS &... attribs) -> TYPE & {
std::vector<std::any> attrvector{attribs...};
return _createElement<TYPE>(attrvector);
}
Расширение пакета параметров шаблона в вектор в функции createElement не компилируется. Я использую версию c ++ 17
Когда я вызываю функцию шаблона, я передаю ей объекты атрибутов. Один в параметре шаблона, который сравнивается с именем сущности HTML, но с заглавной буквы. И в пакете параметров находятся атрибуты. Атрибуты также являются объектами.
Например, в заголовочном файле шаблона viewManager.hpp
using PARAGRAPH = class PARAGRAPH : public Element {
public:
PARAGRAPH(const std::vector<std::any> &attribs)
: Element({listStyleType::disc, marginTop{1_em}, marginLeft{1_em},
marginBottom{0_em}, marginRight{0_em}}) {
setAttribute(attribs);
}
};
определено следующее, а в приложении, как main.cpp
auto &mainArea = createElement<DIV>(
indexBy{"mainArea"}, objectTop{10_pct}, objectLeft{10_pct},
objectWidth{90_pct}, objectHeight{90_pct}, textColor{50, 50, 50},
background{100, 200, 200}, textFace{"FiraMono-Regular"},
textSize{20_pt}, textWeight{400});
Как видите, в синтаксисе используются пользовательские литералы, которые возвращают объект numericFormat.
Полный исходный код, который у меня есть, можно увидеть в C ++ Source ,Я хочу, чтобы любой объект содержал данные, а не указатель, как вы упомянули.