c ++存储指针元组时遇到问题

时间:2016-05-02 04:56:16

标签: c++ c++11 variadic-templates

我有一个对象'S',它存储一个简单的指针元组,通过使用可变参数模板使其变得灵活。有两种方法,store()和store2()。第一个(商店)工作正常。第二个将无法编译,因为std :: make_tuple失败并显示错误:

'调用'make_tuple'没有匹配函数

它进一步补充说,从“B *”到“B *&&”之间没有已知的对话。对于第一个参数(此错误在元组库头中很深)。

代码在这里:

photo_set

3 个答案:

答案 0 :(得分:6)

这是一个错误,因为make_tuple与C ++ 11或更高版本make_pair一样,采用转发引用,当您明确指定非引用的模板参数时,这些转发引用变为rvalue引用。

所以make_tuple<Rs*...>tuple<Rs*...> make_tuple(Rs*&&...) - 参数类型都是右值引用,它们不绑定到左值(并且rs...扩展为左值列表)。

这些make_meow函数的重点是避免必须写出显式模板参数,所以......不要写它们。

答案 1 :(得分:3)

我无法解释确切为什么会出现错误(我怀疑它与强制性衰退有关),但std::make_tuple是不打算使用显式指定的模板参数进行调用(在这种情况下,您可以只使用std::tuple,而不是在需要推导它时)。

以下两项工作中的任何一项:

rs_ = std::tuple<Rs*...>(rs...);
rs_ = std::make_tuple(rs...);

答案 2 :(得分:0)

似乎通过将其更改为std::make_tuple(rs...)它可以正常工作......