小编CAN*_*VAS的帖子

返回 std::Optional<T> 而不复制

我目前正在学习 OpenGL,并在编写着色器抽象类时选择std::optional用于错误处理。现在为了防止意外的双重释放,我将删除复制构造函数

// Shader.h
Shader(const Shader&) = delete;
Shader& operator=(const Shader&) = delete;
Run Code Online (Sandbox Code Playgroud)

但回来时

// Shader.cpp
return std::make_optional<Shader>(Shader(id));
Run Code Online (Sandbox Code Playgroud)

在静态函数中fromSrc它给了我一个编译错误

Error (active)  E0304   no instance of overloaded function "std::make_optional" matches the argument list   LearnOpengl *\LearnOpengl\LearnOpengl\src\util\Shader.cpp   90  
Run Code Online (Sandbox Code Playgroud)

我正在使用 Visual Studio 2022 (MSVC v143) 和 c++17

编辑:我被告知要实现移动构造函数,这是一个很好的实现吗?

Error (active)  E0304   no instance of overloaded function "std::make_optional" matches the argument list   LearnOpengl *\LearnOpengl\LearnOpengl\src\util\Shader.cpp   90  
Run Code Online (Sandbox Code Playgroud)

c++ c++17 stdoptional

2
推荐指数
1
解决办法
444
查看次数

标签 统计

c++ ×1

c++17 ×1

stdoptional ×1