条件ref限定词

时间:2018-06-20 01:21:54

标签: c++11 ref-qualifier

我具有类似CRTP的层次结构,其中派生类的实现可能有所不同,对于一个类,允许某些方法调用右值引用,但对于另一类,则不希望这样:

template <class TDerived>
struct Base {
    TDerived& foo() {
        // Body
        return static_cast<TDerived&>(*this);
    }
};

struct Derived1: public Base<Derived1> {};
struct Derived2: public Base<Derived2> {};

int main() {
    // Should not compile:
    // Derived1().foo();

    // Should compile:
    Derived2().foo();
    return 0;
}

因此,要禁止在右值引用上调用foo(),可以这样添加ref-qualifier:

TDerived& foo() & {...}

但是我想知道有没有一种简单的方法可以有条件地添加这种ref限定符,而无需复制foo()方法(并添加一些类似于SFINAE的代码)?

0 个答案:

没有答案