初始化std::pair<double, std::array<std::pair<double, double>, 3>>。

4

请问以下代码中std::vector::push_back调用中std::make_pair的正确语法是什么:

#include <array>
#include <vector>
#include <utility>

int main()
{
    typedef std::pair<double, double> PairType;
    std::vector<std::pair<double, std::array<PairType, 3> > > myVector;

    double Key = 0.0;
    PairType Pair1 = std::make_pair(1.0, 2.0);
    PairType Pair2 = std::make_pair(3.0, 4.0);
    PairType Pair3 = std::make_pair(5.0, 6.0);

    myVector.push_back(std::make_pair(Key, { Pair1, Pair2, Pair3 } )); // Syntax Error

    return 0;
}

编译器(MS VS2015.2)无法确定std :: make_pair调用中第二个参数的类型,这是可以理解的,但我不知道该如何解决它。

可能是为什么我的模板不接受初始化列表的重复问题。 - LogicStuff
2
请注意,您不需要使用make_pair:myVector.push_back({Key, { Pair1, Pair2, Pair3 } }); - Vaughn Cato
2个回答

3

看起来编译器不能确定{ Pair1, Pair2, Pair3 }是一个包含三个pair的std::array。明确指定类型应该可以解决:

myVector.push_back(std::make_pair(Key, std::array<PairType,3>{ Pair1, Pair2, Pair3 } ));

演示。


3

1
只需将 make_array 保持不变,因为它并不太长。 - Yakk - Adam Nevraumont
1
@Yakk 使用 using std::experimental::make_array;?可以的。 - songyuanyao
这是一个短函数,只需要翻译文本内容,不需要编写实现。 - Yakk - Adam Nevraumont

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接