c++ - c++ 将数据添加到包含 std::tuple 的 std::vector
问题描述
下面是将元素添加到包含 a 的向量的代码std::pair
std::vector<std::pair<std::string, std::type_index>> args_;
template <class T>
inline OperationEntry& setArg(const std::string& name)
{
args_.push_back({name, typeid(T)});
return *this;
}
如何将元素添加到包含 a 的向量中std::tuple
?
std::vector<std::tuple<std::string, std::type_index, Attribute>> args_;
template <class T>
inline OperationEntry& setArg(const std::string& name, Attribute value = Attribute())
{
args_.push_back({name, typeid(T), value});
return *this;
}
我试过了args_.push_back(std::make_tuple(name, typeid(T), value));
我收到此错误:
[GCC] converting to
‘std::vector<std::tuple<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, std::type_index,
mv::Attribute> >::value_type {aka
std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, std::type_index, mv::Attribute>}’ from
initializer list would use explicit constructor ‘constexpr std::tuple<
<template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements =
{const std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >&, const std::type_info&, mv::Attribute&};
<template-parameter-2-2> = void; _Elements =
{std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, std::type_index, mv::Attribute}]’
解决方案
args_.push_back({name, typeid(T), value});
在N4387之前,std::tuple
用于上述初始化的构造函数是无条件explicit
的,如果在复制列表初始化中通过重载决议选择,则允许编译器引发错误。
args_.push_back(std::make_tuple(name, typeid(T), value));
上面的调用将尝试对std::type_info
不可复制的实例使用复制构造函数。
为了在 N4387 之前的实现中构造元组,请使用emplace_back
:
args_.emplace_back(name, typeid(T), value);
或推回可复制构造类型的元组:
args_.push_back(std::make_tuple(name, std::type_index{typeid(T)}, value));
// ~~~~~~~~~^
推荐阅读
- javascript - JS - 单击链接时更改href并触发图像下载
- jsf - 在 JSF 中覆盖 Application.getResourceBundle() 的正确方法是什么?
- c - 在 Windows 10 上构建此代码的正确方法是什么?
- typescript - Deno 目前可以按原样使用吗?版本 (0.2.1)
- java - 无法使用 Xpath 从下拉框中选择值
- node.js - 每次调用这个 Lambda,我都会收到 502 - AWS
- windows - OSX 上的 XCOPY 命令
- bash - 将 curl 与 gnu-parallel 或 xarg 一起使用,以循环通过 bash 中的端口 1-65535
- python-3.x - 使用 Python 和 Chromedriver 进行 Internet 异常处理的 Selenium 丢失
- zabbix - 事件通知