C++ cli 如何将可选项与托管类型一起使用

C++ cli 如何将可选项与托管类型一起使用,c++-cli,clr,C++ Cli,Clr,我想创建一个可能存在异常的函数,如果是这种情况,则返回可选的 下面是一个小代码示例 optional<Exception^> opt; if (opt) MessageBox::Show("Error"); 可选选项; 如果(选择) MessageBox::显示(“错误”); 我得到以下错误: 错误C3265无法在非托管中声明托管“\u值” 'std::_Optional_destruct_base::$UnnamedClass$0x61

我想创建一个可能存在异常的函数,如果是这种情况,则返回可选的

下面是一个小代码示例

 optional<Exception^> opt;
        if (opt)
            MessageBox::Show("Error");
可选选项;
如果(选择)
MessageBox::显示(“错误”);
我得到以下错误:

错误C3265无法在非托管中声明托管“\u值” 'std::_Optional_destruct_base::$UnnamedClass$0x61d94762$23$'CLR d:\visualstudio\vc\tools\msvc\14.16.27023\include\Optional 87

错误C2848'std:_可选_自毁_基::_值]:a 托管类型不能是 联合CLR d:\visualstudio\vc\tools\msvc\14.16.27023\include\optional 87

错误C3699'&&':无法对类型使用此间接寻址 “\u Ty”CLR d:\visualstudio\vc\tools\msvc\14.16.27023\include\optional 431 错误C3699'&&':无法对类型“const”使用此间接寻址 _Ty'CLR d:\visualstudio\vc\tools\msvc\14.16.27023\include\optional 435

错误C3699'&&':无法对类型使用此间接寻址 “\u Ty”CLR d:\visualstudio\vc\tools\msvc\14.16.27023\include\optional 467

错误C3699'&&':无法对类型“const”使用此间接寻址 _Ty'CLR d:\visualstudio\vc\tools\msvc\14.16.27023\include\optional 476


那么我如何使用可选的?在C++ CLI中有可能吗?有哪些替代方案?

我对std::optional的理解是,它是一种可能不包含值的值类型,因为某些操作失败。Net处理此类故障的标准方法是抛出异常或让异常传播出去。然而,听起来你不想这样做,所以这里有一些替代方案

对于.Net引用类型(在C#中声明为
class
,在C++/CLI中声明为
ref class
ref struct
,在C++/CLI中使用
^
),处理此问题的方法只是返回
nullptr
。引用类型很少按值存储,返回null更为标准


对于.Net值类型(在C#中声明为
struct
,在C++/CLI中声明为
value class
value struct
,在C++/CLI中使用时不使用
^
),我将使用。Nullable是一种类似于Optional的类型,其中值类型允许为null。

我对std::Optional的理解是,它是一种可能不包含值的值类型,因为某些操作失败。Net处理此类故障的标准方法是抛出异常或让异常传播出去。然而,听起来你不想这样做,所以这里有一些替代方案

对于.Net引用类型(在C#中声明为
class
,在C++/CLI中声明为
ref class
ref struct
,在C++/CLI中使用
^
),处理此问题的方法只是返回
nullptr
。引用类型很少按值存储,返回null更为标准


对于.Net值类型(在C#中声明为
struct
,在C++/CLI中声明为
value class
value struct
,在C++/CLI中使用时不使用
^
),我将使用。NulLable是一个类似于可选的类型,其中允许C++的值类型为null。< /P>如果询问C++和CLI,考虑标记。如果询问C++/CLI,考虑标记。