1

我有类似 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-qualifier 而无需复制foo()方法(并添加一些类似 SFINAE 的代码)?

4

0 回答 0