D:创建模板对象数组

D: Creating an array of templated objects

我正在尝试创建一个包含 Regex 个对象的数组,如下所示:Regex[] regexes;。 编译失败 main.d(46): Error: template std.regex.Regex(Char) is used as a type.

我觉得文档很神秘。我所了解的是模板在编译时生成代码,但我看不出是什么阻止我创建 Regex.

数组

Whosebug 上有一个 existing question 有同样的问题,但它处理的是 C++,而不是 D。

如果不首先使用类型实例化模板,则无法创建正则表达式对象。这是因为实际类型是在编译时根据您提供的实例化类型生成的。 Regex 本身不是实际类型,它只是一个模板函数,允许您在实例化时生成一个类型。

在这种情况下,您可能想要更改:

Regex[] regexes;

进入:

Regex!char[] regexes;

告诉编译器您的正则表达式包含字符而不是某些派生类型。这具体意味着您正在使用 char 类型实例化 Regex 模板。