原文
如何通过std.sumtype
创建可选
类型?
enum None;
struct Some(T) { T x; }
alias Option = SumType!(Some!T, None);
我收到错误:未定义的T标识
你打算输入:
alias Option(T) = SumType!(Some!T, None);
不幸,因为1807
问题,这不是定义可选
类型的好方法.如果试按函数参数
用它,则会收到令人困惑
的错误消息.
import std.sumtype;
struct None {}
struct Some(T) { T value; }
alias Option(T) = SumType!(None, Some!T);
bool isNone(T)(Option!T opt)
{
return opt.match!(
(Some!T _) => false,
(None _) => true
);
}
unittest
{
Option!int x = Some!int(123), y = None.init;
assert(!x.isNone);
assert(y.isNone);
//错误:不能使用`!()(SumType!(None, Some!int))`参数类型调用`"isNone"`模板的任意重载.
}
要解决它,应使用带alias this(别名本)
的结构定义可选
类型,如D博客上的本文中所述,译文.也为你提供了更好看
的错误消息.对可选
,如下:文章来源:https://www.toymoban.com/news/detail-510515.html
struct Option(T)
{
SumType!(None, Some!T) data;
alias data this;
this(Value)(Value value) { data = value; }
}
如果使用此版本的可选
而不是别名
版本,则上例
编译,且通过测试单元
.文章来源地址https://www.toymoban.com/news/detail-510515.html
到了这里,关于2306d创建可选及别名问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!