【发布时间】:2016-02-28 01:23:58
【问题描述】:
我正在尝试用 C++ 编写一个非常小的状态机。我希望这些状态成为机器类的方法,并且每个状态在运行时都应该返回要移动到的新状态。当然,我正在使用一些 typedef 来提供帮助。
template <typename C, typename E>
using State = State<C, E> (C::*)(Stream<E>&);
状态应该是一个成员函数(在C 类中),它接受一个流对象并产生一个新状态。我收到以下错误。
fsm.hpp:8:15: error: ‘State’ does not name a type
using State = State<C, E> (C::*)(Stream<E>&);
显然,State 尚未在应该声明 State 的行上声明。据我所知,没有办法“转发声明”一个 typedef,那么声明这个 typename 的合适方法是什么?
【问题讨论】:
-
State只对应函数(well, method)类型。状态机本身是C类型,是State的一个参数。我不需要每个州都有单独的类实例;我只需要函数。 -
澄清一下,我希望
State<C, E>是一个方法,它接受一个参数,然后返回一个新的State<C, E>,它本身是一个方法,而不是一个类实例。 -
我明白了,我想我看错了你的代码。
-
你能发一个MCVE吗?从您发布的内容来看,您似乎有一个名为
State的类模板,并且您正在尝试定义一个别名也名为State。 -
@Praetorian:我一开始也是这么想的,但我认为这实际上并不是怎么回事,他希望
State<C,E>引用当前定义的别名类型。
标签: c++ c++11 types self-reference