【发布时间】:2010-11-01 23:59:37
【问题描述】:
出于性能原因,我使用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 是来自正态分布的随机数,其中正态分布的参数是类的一部分。所以命令模式非常适合。我有很多按特定顺序调用需要维护状态的函数。
【问题讨论】:
-
您的命令示例会有所帮助。如果您有一堆小的命令模板类,那么在您的示例中发布 1 或 2 个作为示例可能会帮助人们提出替代方案。至少,它将提高未来读者对问题的理解。
-
您能否提供更多关于您使用命令模式解决的特定场景的信息?另外,解释为什么你认为虚函数太慢了。有没有用虚函数实现过,觉得太慢了?
标签: c++ performance design-patterns templates virtual-functions