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

时间:2014-03-16 19:50:15

标签: templates const d

我有一个带有bool模板参数(is_const)的类方法,当is_const为false时,它只调用一个可变函数(使用static if)。如何告诉D编译器为is_const = true使这个函数为const,而不是为is_const = false? 我不想复制粘贴函数,但我看不到任何其他方法。 (我不能使用inout,因为它确实对is_const = false和is_const = true的行为有所不同)

1 个答案:

答案 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时,您必须格外小心不要改变。