如果模板为true,如何使模板函数const

dsp*_*pyz 3 templates d const

我有一个带有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设置时变异.