我正在编写一个带有mixin模板的模块来提供
main
用于单元测试的功能。用法如下:
/* For modules without their own main, e.g. libraries.
* main is conditionally supplied using version(unittest).
*/
mixin Main;
/* For executable modules defining function "realMain".
* Generated main has the same signature and return type
* as realMain, and transfers control to it. Additionally,
* main exits without calling realMain for version (unittest).
*/
mixin Main!realMain;
我的想法是
每一个
矿井混合模块
主要的
适当地,以便:
-
图书馆不需要
--main
传递给
rdmd
,因为
-
似乎没有好的方法来决定
不
通过
--主要
对于定义自己的模块,当为目录层次结构中的每个文件自动运行单元测试时--退出代码来自
RDMD
与失败的编译相同。
我在用
std.traits
确定
realMain
的有效性
主要的
函数,并确保生成
主要的
有相同的签名。一切似乎都在工作,但我认为它可能更干净。当前,用于检查的模板有效
主要的
参数如下:
template isMainArgTypes(alias main)
{
static if (is(ParameterTypeTuple!main == TypeTuple!()))
enum isMainArgTypes = true;
else static if (ParameterTypeTuple!main.length == 1
&& is(ParameterTypeTuple!main[0] T : const T[]))
{
enum isMainArgTypes = is(T : const char[]);
}
else
enum isMainArgTypes = false;
}
我相信一定有办法把中间条件浓缩成单一条件
is
表达式,在没有显式测试元组长度和单独检查字符串类型的情况下,但到目前为止,我刚起步的元编程fu已经很短了。
有什么主意吗,巫师?