【发布时间】:2021-06-06 06:54:21
【问题描述】:
这个问题可能看起来很宽泛,但实际上并非如此。
更具体地说,如果我们使用模板,我们如何区分什么是编译时信息和运行时信息?
我正在观看有关优化和 HFT 系统的 CppCon 视频,并遇到了这个示例。如果您不熟悉高频交易系统,并且洞察力是它们确实试图从基准测试中挤出最后几纳秒,通常会违反经典的 OOD 原则以获取性能。
我想详细说明的例子如下:
template<Side T>
void Strategy<T>::run()
{
const float orderPrice = calcPrice(fairValue, credit);
//....
sendOrder(orderPrice);
}
template<>
float Strategy<Side::buy>::calcPrice(float value, float credit)
{
return value - credit;
}
template<>
float Strategy<Side::sell>::calcPrice(flaot value, float credit)
{
return value + credit;
}
根据作者的说法,这个例子说明了一种避免运行时 if-else 分支的经典方法。
但是在编译的时候,我们真的不知道是要买还是要cell对吧?在运行期间根据市场走势做出决定。
有人可以解释一下运行时和编译时之间的联系,具体来说,我们如何根据运行时信息创建编译时分支?
【问题讨论】:
标签: c++ templates compilation metaprogramming