【发布时间】:2017-08-15 16:42:55
【问题描述】:
如果我有一个带有可选依赖项的基于 DUB 的项目,如何制作它以便某些代码(无论是模块还是版本(...){...} 块)仅在依赖项时才被编译被选中?有没有办法可以根据依赖项是否存在来定义版本标识符?
我已经阅读了here 中记录的“依赖”标签的“可选”和“默认”属性。这允许我将依赖项定义为可选的,但如果我无法对代码进行版本化以反映所选的依赖项,它就会缺乏牙齿。
【问题讨论】:
如果我有一个带有可选依赖项的基于 DUB 的项目,如何制作它以便某些代码(无论是模块还是版本(...){...} 块)仅在依赖项时才被编译被选中?有没有办法可以根据依赖项是否存在来定义版本标识符?
我已经阅读了here 中记录的“依赖”标签的“可选”和“默认”属性。这允许我将依赖项定义为可选的,但如果我无法对代码进行版本化以反映所选的依赖项,它就会缺乏牙齿。
【问题讨论】:
【讨论】:
除了在 dub.sdl 中使用version(foo) 块并要求人们使用versions: "foo",您还有另一种选择。它很粗糙,但它会起作用。
如果你的代码是一个模板,你可以把相关的东西包装在:
template HasVibe()
{
enum HasVibe =
is(typeof(() { import vibe.d; } ));
}
template Foo(T) if (HasVibe!())
{
// your code here
}
如果它不是一个模板,你可以把它变成一个模板:
template log() if (HasVibe!())
{
import vibe.core.log : logDebug;
alias log = logDebug;
}
未经测试,但在紧要关头可能会有所帮助。
【讨论】: