无法将std :: tuple初始化为std :: pair?

时间:2014-09-17 14:57:53

标签: c++ c++11 stl tuples

从我之前关于std :: pair的question开始,我想我可以做类似下面的事情,但它不会编译。

typedef Point::FT float; 
std::vector<std::tuple<Point::FT, int, int> > branch{ (int)(max_leaf_check * mul_factor),
  { std::numeric_limits<Point::FT>::max(), -1 , -1} };

错误:

error: converting to ‘const value_type {aka const std::tuple<float, int, int>}’ from initializer list would use explicit constructor ‘std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {float, int, int}, <template-parameter-2-2> = void, _Elements = {float, int, int}]’

我该如何解决?如果它无法修复,还有其他方法可以在一行中进行初始化吗?

作为跟进,我甚至无法使其与push_back()一起使用。

Point::FT new_dist;
size_t other_child_i, tree_i;
branch.push_back({new_dist, other_child_i, tree_i});

类似的错误。

1 个答案:

答案 0 :(得分:4)

  

我该如何解决?

你不能;显式构造函数阻止隐式括号初始化。

  

如果无法修复,有没有其他方法可以在一行中进行初始化?

std::make_tuple(std::numeric_limits<Point::FT>::max(), -1 , -1)
  

作为后续行动,我甚至无法使用push_back()

branch.emplace_back(new_dist, other_child_i, tree_i);