带有动态分配的c ++中的虚拟化

时间:2016-03-23 21:13:54

标签: c++ templates

这是场景。我的工作是提高代码的效率,在实时仿真中将大量数据从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 ++专家能够权衡虚拟化是否可能以及如何最好地实现它。

感谢您的帮助。

0 个答案:

没有答案