c++ - 将异构初始化器列表传递给流运算符
问题描述
是否可以将可流式传输的异构类型列表传递给调试流式操作符?
string str("blabla");
std::cout << {"A", 3, str} << std::endl;
我想这可能与可变参数模板之类的东西有关?我希望运算符 << 调用列表中的每个元素并附加一个逗号。
解决方案
您不能对异构类型使用初始化列表,但std::tuple
没关系。
确保没有制作不必要的副本。这是使用 C++17 的解决方案。
#include <tuple>
#include <string>
#include <iostream>
template<class... Ts>
std::ostream&
operator<<(std::ostream &os, std::tuple<Ts...> &&tp)
{
auto lam = [&] (auto &&arg0, auto&& ...args) -> auto&& {
os << arg0;
([&] (auto&& arg) {
os << ", " << arg;
} (args), ...);
return os;
};
return std::apply(lam, std::move(tp));
}
int main() {
std::string str("blabla");
std::cout << std::forward_as_tuple("A", 3, str) << std::endl;
}
推荐阅读
- java - 按下 AlertDialog 的肯定按钮时是否刷新 RecyclerView
- javascript - 使用 javascript 突出显示 HTML 语法错误
- angular - 如果在父组件和子组件中设置 ChangeDetectionStrategy OnPush 将不起作用
- android - 将arraylist从一个片段解析到android中的另一个片段
- c - Linux 操作系统中的 main() 计数器
- php - 在 Laravel 中启动 php.exe 时出现错误 0x2
- html - 如何进入内部 Maybe monad 从纯脚本中的 html 按钮中提取类名?
- html - 自动调整 div 边距顶部动态
- python - 如何使用python获取thingspeak通道的field1值
- typo3-8.x - TYPO3 类型为 xxx\\yyy\\Domain\\Model\\User 的对象,身份为 \"1\" 未找到。"