我一直在阅读D语言中的模板系统,并发现了一个不寻常的结构,static if.
根据我设法掌握的内容,它在编译时进行了评估,但是从我搜索的内容来看,这里显示的示例并没有给我带来太多启发.
template Factorial(ulong n)
{
static if(n < 2)
const Factorial = 1;
else
const Factorial = n * Factorial!(n - 1);
}
Run Code Online (Sandbox Code Playgroud)
做static if什么,什么时候应该使用它?
我想做这样的事情:
template <uint64_t N>
struct a {
static constexpr T1 v1 = {};
static constexpr T2 v2 = {};
static constexpr auto v3 = (N % 2 == 1 ? v1 : v2);
};
Run Code Online (Sandbox Code Playgroud)
但是我不能将 (? :) 用于不同类型。我怎么能做到这一点?