如何将参数包扩展为向量<any>
How to expand a parameter pack into a vector<any>
编译问题错误:没有匹配的构造函数来初始化'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++来源中看到。我希望 any 对象包含数据,而不是您提到的指针。
我相信您的问题完全取决于_createElement
的行为,我认为这是您正在使用的某些库函数。稍微更改代码以仅返回attrvector
显示没有问题:
#include <iostream>
#include <vector>
#include <any>
template <typename... ATTRS>
std::vector<std::any> createElement(const ATTRS &... attribs) {
std::vector<std::any> attrvector{attribs...};
return attrvector;
}
using namespace std;
int main(int argc, char *argv[]) {
auto vec = createElement(1.0f,2.0f,3u,4u,-1,"hello");
for (const auto& z : vec) {
std::cout << z.type().name() << std::endl;
}
}
打印(使用 C++17 兼容版本的 CLANG++(
f
f
j
j
i
PKc
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 计算排序向量的向量中唯一值的计数
- 矩阵向量乘法(cublasDgemv)返回零
- EASTL矢量<向量<int>>连续的
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 将图像加载到Mat-vvector<向量<垫子>>