小编rag*_*bit的帖子

"通用"有限状态机实现

我经常需要实现一个能够根据用户命令切换其行为的对象.例如,这可能是连接到PC并由用户通过GUI控制的类代表设备的情况.更一般地说,设备必须独立存在,具有自己的操作调度. 在此输入图像描述 由于我想从特定的设备类中"提取"这种行为以增强代码重用,这里我提出了一个使用Qt的模板化有限状态机类.我还报告了A类中的一个示例用法.你(比我更有经验的程序员:)怎么想?这是设计这样一个班级的"正确"方式吗?有性能问题吗?

template < class Base,
           typename T,
           class ThreadPolicy>
class FSM
{
public:
    typedef bool (Base::*my_func)();
    struct SState {
        SState(){}
        SState(const T& id_arg,
               const T& next_arg,
               const T& error_arg,
               const QList<T>& branches_arg,
               const my_func& op_arg) :
            id(id_arg),
            next(next_arg),
            error(error_arg),
            branches(branches_arg),
            op(op_arg)
        {}
        T id;       // state ID
        T next;    // next state
        T error;    // in case of error
        QList<T> branches; // allowed state switching from current
        my_func op; // operation associated with current state
    };
    typedef QMap<T ,SState> …
Run Code Online (Sandbox Code Playgroud)

c++ templates state-machine

9
推荐指数
1
解决办法
9863
查看次数

Qt:typeid替代品

我想知道Qt是否提供了typeid的替代方法来识别变量类型并以人类可读的格式获取它们的名称.我的具体问题如下:

struct gArgument{
    QString type; 
    void* arg;
};

void gargConverter(gArgument* oArg, T data){
    oArg->type = typeid(data).name();
    oArg->arg = static_cast<void*> (&data);
}
Run Code Online (Sandbox Code Playgroud)

我们的想法是概括一个变量以用作函数的输入.作为一个侧节点tyeinfo似乎在我的系统上没有正常工作(我在Windows 7上使用MinGW),如果我尝试:

  int i; std::cout <<   typeid(i).name() << std::endl;
  QString s; std::cout <<   typeid(s).name() << std::endl;
  double d; std::cout <<   typeid(d).name() << std::endl;
  float f; std::cout <<   typeid(f).name() << std::endl;
Run Code Online (Sandbox Code Playgroud)

我明白了

i
7QString
d
f
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

c++ qt typeinfo qtcore

6
推荐指数
1
解决办法
3154
查看次数

标签 统计

c++ ×2

qt ×1

qtcore ×1

state-machine ×1

templates ×1

typeinfo ×1