gpt4 book ai didi

c++ - RValues 的初始化列表

转载 作者:行者123 更新时间:2023-11-30 05:15:25 25 4
gpt4 key购买 nike

现在我有一个只有一个构造函数的类

ShaderProgram(std::initializer_list<std::reference_wrapper<const Shader>> shaders);

我正在使用引用包装器,因为我没有引用的 initializer_list 并且我无法复制

这段代码有效

    Shader v{ Shader::Type::Vertex, readFile("res/simple.vert") };
Shader f{ Shader::Type::Fragment, readFile("res/simple.frag") };
ShaderProgram shader{ v, f };

但这不

    ShaderProgram shader{ 
Shader { Shader::Type::Vertex, readFile("res/simple.vert") },
Shader { Shader::Type::Fragment, readFile("res/simple.frag") }
};

我应该在这里介绍什么?我想我缺少某种构造函数来处理右值,但我似乎无法让它工作

当前的错误是:

E1776 function "std::reference_wrapper<_Ty>::reference_wrapper(_Ty &&) [with _Ty=const core::graphics::Shader]" (declared at line 1830 of "c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\include\type_traits") cannot be referenced -- it is a deleted function RenderEngine Main.cpp (77)

最佳答案

reference_wrapper不能从纯右值创建。所以你所做的是不可能的。

在我看来,您的界面似乎有些困惑。一方面,Shader是不可复制的类型。但另一方面,你似乎想调用 ShaderProgramShader prvalues,将在 ShaderProgram 之后立即销毁构造对象。

我说,ShaderProgram 有两个接口(interface): 需要 initializer_list<Shader> 的一个: 这样的用户不会有兴趣保留他们的 Shader函数初始化之后的对象。另一个将采用非空指针的数组/vector/等指向Shader。对象。这适用于那些想要保留其 Shader 的用户。创建程序后周围的对象。

也可以创建可变参数模板,其中您要求所有元素都属于 Shader。类型。如果没有 C++17 功能,最后一部分(验证所有传递的类型都是某种形式的 Shader)相当困难。

关于c++ - RValues 的初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43106556/

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