这是场景。我的工作是提高代码的效率,在实时仿真中将大量数据从ICD传输到本地模型。这是此工具的主要功能。但是,Transfer类必然包含一个纯虚拟exec函数,该函数由实现exec函数以执行传输的其他类继承。我相信代码设计得很好并且运行良好,但速度不够快,因此溢出的帧可能会发生。由于每个传输对象都是纯虚函数的实现,因此代码将在每个Transfer对象中具有虚拟指针。我已经听够了(例如来自Alexandrescu)关于如何通过将vptr放在缓存前面来减慢速度。所以我希望尽可能虚拟化这段代码(下面大大简化):
Transfer.h
class Transfer
{
public:
virtual void exec(void)=0;
}
针对不同传输类型的许多不同模板的一个示例
ConversionTransfer.h
template<class fromType, class toType, bool negate_trans = false>
class ConversionTransfer : public Transfer
{
public:
/// Move the data, converting the input type to the output type
void exec(void);
};
//template class implementation
template <class fromType, class toType, bool negate_trans>:
void ConversionTransfer<fromType, toType, negate_trans>::exec(void)
{
*(toType *)this->mToAddr = (toType)*(fromType *)this->mFromAddr;
}
在编译时不知道to和from类型,因此在模拟的初始化阶段动态创建传输对象。
初始化阶段后如何使用它的示例:
Table.cpp
Transfer * newTransfer = NULL;
//create the transfer object
newTransfer = new ConversionTransfer<int, int,
false>;
mTransfers.push_back(newTransfer);
void Table::exec(void)
{
TransferList_t::iterator end(mTransfers.end());
for (trans = mTransfers.begin(); trans != end; ++trans)
(*trans)->exec();
}
mTransfers是一个包含指向所有传输对象的指针的向量。我希望C ++专家能够权衡虚拟化是否可能以及如何最好地实现它。
感谢您的帮助。