我有一个带有bool模板参数(is_const)的类方法,它只在is_const为false时调用一个可变函数(使用static if).如何告诉D编译器为is_const = true使这个函数为const,而不是为is_const = false?我不想复制粘贴函数,但我看不到任何其他方法.(我不能使用inout,因为它确实对is_const = false和is_const = true的行为有所不同)
小智 5
您可以添加一个const重载,转发到事实上的const实现:
class C
{
void m(bool is_const)() // de-facto const when is_const is true
{
static if(!is_const) {/* ... mutate ... */};
}
void m(bool is_const)() const if(is_const)
{
return (cast() this).m!true();
}
}
Run Code Online (Sandbox Code Playgroud)
然后你必须格外小心不要在is_const设置时变异.