概念:require class method return type is nested type of same class
Concepts: require class method return type is nested type of same class
我正在尝试实现以下概念
template<typename T>
concept GameLogic = requires(T a) {
typename T::StateType;
typename T::EventType;
{ a.initialState()->T::StateType }; // <-- relevant bit
};
我想强加 initialState()
return 类型是相同 class.
的嵌套类型
概念定义不会引发错误 (gcc 9.2),但 GameLogic
的以下实现无法满足要求:
class SimpleGameLogic {
public:
using StateType = SimpleState;
using EventType = SimpleEvent;
StateType initialState() {
return _initialState;
}
private:
StateType _initialState;
};
我已经尝试了上述语法的一些变体,但找不到合适的……或者这可能还没有实现?我做错了什么?
三期:
{ a.initialState()->T::StateType }; // <-- relevant bit
首先语法错误,应该是:
{ a.initialState() } -> T::StateType;
其次,你错过了typename
:
{ a.initialState() } -> typename T::StateType;
第三,在 C++20 中,我们不再有 -> Type
(参见 )。箭头右侧的东西必须是约束。类似于:
{ a.initialState() } -> std::same_as<typename T::StateType>;
一旦你解决了这个问题,it works。
我正在尝试实现以下概念
template<typename T>
concept GameLogic = requires(T a) {
typename T::StateType;
typename T::EventType;
{ a.initialState()->T::StateType }; // <-- relevant bit
};
我想强加 initialState()
return 类型是相同 class.
概念定义不会引发错误 (gcc 9.2),但 GameLogic
的以下实现无法满足要求:
class SimpleGameLogic {
public:
using StateType = SimpleState;
using EventType = SimpleEvent;
StateType initialState() {
return _initialState;
}
private:
StateType _initialState;
};
我已经尝试了上述语法的一些变体,但找不到合适的……或者这可能还没有实现?我做错了什么?
三期:
{ a.initialState()->T::StateType }; // <-- relevant bit
首先语法错误,应该是:
{ a.initialState() } -> T::StateType;
其次,你错过了typename
:
{ a.initialState() } -> typename T::StateType;
第三,在 C++20 中,我们不再有 -> Type
(参见
{ a.initialState() } -> std::same_as<typename T::StateType>;
一旦你解决了这个问题,it works。