出于性能原因,我使用Curiously Reoccuring Template Pattern来避免虚函数。我有很多执行数百万次的小命令。我正在尝试将其融入命令模式。我想将大量命令添加到队列中,然后逐个遍历它们执行。每个命令都使用 CRTP 来避免虚拟功能。我遇到的问题是命令模式通常是使用指针向量实现的。但是,当 Command 类被模板化后,就很难传递通用的 Command 指针。我不是 C++ 专家,所以也许有一种明显的方法来存储模板化命令对象的向量?我一直在尝试使用类似的东西:
boost:ptr_vector commands;
AddCommand(Command* command) {
commands.push_back(command);
}
问题Command
不是类型,所以Command* command
会出现编译错误。我需要使用Command<CommandType>
,但这不起作用,因为我需要队列来保存不同类型的命令。
任何解决方案的想法?还是虚拟功能是我唯一的选择?
添加:命令对象是蒙特卡罗模拟算法的一部分。所以你可能有,Command 是来自正态分布的随机数,其中正态分布的参数是类的一部分。所以命令模式非常适合。我有很多按特定顺序调用需要维护状态的函数。