C++ 编译std::tuple时遇到问题
我无法用叮当声编译模板。。谢谢你的帮助 尽管该库的作者声称他在linux上使用gcc编译了以下代码,但当我尝试使用clang编译时,它抱怨编译以下模板: //这会产生“预期表达式”的错误C++ 编译std::tuple时遇到问题,c++,templates,clang,stdtuple,C++,Templates,Clang,Stdtuple,我无法用叮当声编译模板。。谢谢你的帮助 尽管该库的作者声称他在linux上使用gcc编译了以下代码,但当我尝试使用clang编译时,它抱怨编译以下模板: //这会产生“预期表达式”的错误 template static ostream&operator为了检索tuple元素,应使用非成员函数: out << ::std::get<0>(t) << " " << ::std::get<1>(t) << " " <<
template static ostream&operator为了检索tuple
元素,应使用非成员函数:
out << ::std::get<0>(t) << " " << ::std::get<1>(t) << " " << ::std::get<2>(t);
出于某种原因,out是一个自由函数,而不是成员函数。所以应该是::std::get(p.second)
等等。@VTT原因是在依赖上下文中调用成员版本的正确语法是t.template get()
,这很烦人。@SebastianRedl尽管这不是不提供成员版本的原因。他们可以很好地实现成员和非成员版本,就像swap
@VTT为什么要使用(p.second)?模板参数已经给出了第二个元素。我错了吗?但是你的建议也可以编译。@eral我假设p.second
本身就是元组,索引
也是零基的,所以它给出了第三个元素。
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);
}
}
}
out << ::std::get<0>(t) << " " << ::std::get<1>(t) << " " << ::std::get<2>(t);