从我之前关于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});
类似的错误。
答案 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);