【发布时间】:2017-03-30 00:44:01
【问题描述】:
现在我有一个只有一个构造函数的类
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 函数“std::reference_wrapper<_ty>::reference_wrapper(_Ty &&) [with _Ty=const core::graphics::Shader]”(在“c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\include\type_traits") 不能被引用——它是一个被删除的 函数渲染引擎 Main.cpp (77)
【问题讨论】:
-
“这不起作用” - 怎么做?你收到什么错误?你能发一个MVCE吗?
-
Here is a MCVE。问题是
std::reference_wrapper被指定为有一个删除的移动构造函数(不要问我为什么) -
在另一个问题中,您说
A是不可复制的。这个问题也是这样吗?如果是这样,那么您应该在问题中包含该信息。 -
还解释了
ShaderProgram构造函数实际上对初始化列表中的东西做了什么。 (它不能保存对它们的引用,因为它们在构造函数调用后被销毁,并且它不能复制它们,因为它们是不可复制的,没有太多选择) -
@M.M
reference_wrapper<T>没有删除的移动构造函数。它有一个从右值Ts 中删除的构造函数,因为那是不安全的。