编译问题错误:'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中看到。我希望任何对象都包含数据,而不是您提到的指针。