c++ - 使用 clang 编译 std::tuple 时遇到问题
问题描述
我在用clang编译模板时遇到了麻烦。任何帮助表示赞赏。
尽管该库的作者声称他在 linux 上使用 gcc 编译了以下代码,但当我尝试使用 clang 编译时,它抱怨编译以下模板:
// 这给出了“预期表达式”的错误
template<class T1, class T2, class T3> static ostream& operator << (
ostream& out, const std::tuple<T1, T2, T3>& t) {
out << t.get<0>() << " " << t.get<1>() << " " << t.get<2>();
return out;
}
这给出了错误:
no member named 'get' in 'std::__1::tuple<std::__1::basic_string<char>, std::__1::basic_string<char>, int, int>'
代码:
void save_by_conns(vector<real_t> &container, const string &nam)
{
LOOP(const WC_CONN_PAIR &p, connections)
{
VDI begin = container.begin() + p.second.get<2>();
VDI end = container.begin() + p.second.get<3>();
if (begin != end)
{
save_range(make_pair(begin, end), p.second.get<1>() + "_" + nam);
}
}
}
解决方案
为了检索元素,应使用tuple
非成员函数:std::get
out << ::std::get<0>(t) << " " << ::std::get<1>(t) << " " << ::std::get<2>(t);
推荐阅读
- javascript - 即使单击两次按钮,如何使功能仅工作一次?
- javascript - Redux useSelector 过滤对象?
- matlab - 如何在 MATLAB 命令行窗口中将方程显示为 f(x)=0.0667*x?
- angular - Angular 没有创建新项目
- meteor - 如何从数据库字符串动态创建 Blaze 模板
- spring-boot - 引起:com.datastax.oss.driver.api.core.InvalidKeyspaceException: Invalid keyspace mykeyspace in Spring Boot Cassandra
- mysql - 操作失败:将 SQL 脚本应用于数据库时出错
- windows-7 - 无法删除引用孤立 SID 的 ACL 条目
- c++ - c ++析构函数解除分配失败
- java - 将多个对象绘制到 JFrame