【发布时间】:2014-01-26 20:47:55
【问题描述】:
我有一个class transition,里面有一个成员函数rate。我正在寻求一种方法,该方法允许我将自定义设计的 rates 插入到 transition 的瞬间中,在这些瞬间被创建之后,并且在运行时会很快!
我想优化代码以提高速度。 rate 进行简单的计算,但被程序非常频繁且多次调用。所以我想我应该避免使用虚函数......问题:在 C++ 中实现这一目标的其他最佳方法是什么(模板、boost、......)?关于特定方法的速度的评论将不胜感激。谢谢!
class transition {
public:
transition() : vec() {}
double rate(T_vec::iterator a) { return ...; }
private:
T_vec vec;
};
/* custom rate #1 */
double my_rate_1( T_vec::iterator) {
/* do something */
return ans;
}
/* custom rate #2 */
double my_rate_2( T_vec::iterator) {
/* do something */
return ans;
}
const int N=10;
int main (void) {
vector<transition*> ts(N);
for(int i=0;i!=N;++i) ts[i] = new transition;
/* How to efficiently implement the pseudo code that follows? */
ts[0]->rate = my_rate_1;
ts[1]->rate = my_rate_2;
/* ... */
}
【问题讨论】:
-
“名称查找”是什么意思?这是在编译时完成的。
-
您需要静态(编译时)解决方案(例如:模板)还是像策略模式这样的动态(运行时可配置)解决方案?
-
@piotruś - 这是伪代码,因为我不知道如何以速度为目标首先做到这一点(在编译时插入自定义函数)
-
@KarolyHorvath static(编译时间,模板)就可以了!
-
如果您需要运行时多态性,对 std::function 与裸函数指针进行基准测试,它们应该具有可比性,但 std::function 更灵活且 C++ 风格。