概念:require类方法的返回类型是同一类的嵌套类型

时间:2020-05-01 15:56:24

标签: c++ c++20 c++-concepts

我正在尝试实现以下概念

template<typename T>
concept GameLogic = requires(T a)  {
    typename T::StateType;
    typename T::EventType;
    { a.initialState()->T::StateType }; // <-- relevant bit
};

我想强加initialState()返回类型是同一类的嵌套类型。

概念定义不会引发错误(gcc 9.2),但是GameLogic的以下实现无法满足要求:

class SimpleGameLogic {
public:

    using StateType = SimpleState;
    using EventType = SimpleEvent;

    StateType initialState() {
        return _initialState;
    }

private:
    StateType _initialState;

};

我已经尝试了上述语法的一些变体,但是找不到正确的语法...或者这可能尚未实现?我在做什么错了?

1 个答案:

答案 0 :(得分:4)

三个问题:

{ a.initialState()->T::StateType }; // <-- relevant bit

首先,语法错误,应该是:

{ a.initialState() } -> T::StateType;

第二,您丢失了typename

{ a.initialState() } -> typename T::StateType;

第三,在C ++ 20中,我们不再有-> Type(请参阅this answer)。箭头右侧的东西必须是约束。像这样:

{ a.initialState() } -> std::same_as<typename T::StateType>;

解决此问题后,it works