我有一个带有bool模板参数(is_const)的类方法,当is_const为false时,它只调用一个可变函数(使用static if)。如何告诉D编译器为is_const = true使这个函数为const,而不是为is_const = false? 我不想复制粘贴函数,但我看不到任何其他方法。 (我不能使用inout,因为它确实对is_const = false和is_const = true的行为有所不同)
答案 0 :(得分: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();
}
}
在设置is_const
时,您必须格外小心不要改变。