gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:57:21 25 4
gpt4 key购买 nike

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

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

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

代码在这里:

#include <tuple>
#include <utility>

template<typename...Rs>
struct S
{
void store(std::tuple<Rs*...> rs)
{
rs_ = rs;
}

void store2(Rs*...rs)
{
rs_ = std::make_tuple<Rs*...>(rs...); // This is the guy that breaks
}

private:
std::tuple<Rs*...> rs_;
};

struct B
{};

struct A : S<B, B>
{};

int main()
{
auto *b1 = new B;
auto *b2 = new B;
auto *a1 = new A;

a1->store(std::make_tuple(b1, b2)); // This works
a1->store2(b1, b2); // How can I get this to work?
// (It causes an error in std::make_tuple of store2 above)
}

最佳答案

这是一个错误,因为 make_tuple ,如 C++11 或更高版本 make_pair , 采用转发引用,并且当您显式指定非引用的模板参数时,这些转发引用将成为右值引用。

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

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

关于c++在存储指针元组时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36975226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com