C++ 默认参数的便利

C++ 默认参数的便利

有时管理两个函数的类似版本实在太费劲,所以C++提供了一种补救机制:默认参数。默认参数是指在函数申明的时候已经设置函数参数的默认值,若函数调用的时候没有制定函数参数值,则采用申明时的默认值。

应用举例

类BufContainer存在push方法如下:

#define GET_GPU_DATA 0x00

struct Item
{
    int dataSize;
    DWORD dataType;
    std::shared_ptr<uint8_t> data;
    LONGLONG dataTimeTag;
};

bool BufContainer::push(const uint8_t *pData, int dataSize)
{
    if(!pData || (dataSize <=0))
    {
        LOGE << "invaild data";
        return false;
    }
    Item item;
    item.dataSize = dataSize;
    item.dataType = GET_GPU_DATA;
    item.data = std::shared_ptr<uint8_t>(new uint8_t[dataSize], std::default_delete<uint8_t[]>());
    item.dataTimeTag = Timer::currentTick();
    memcpy((uint8_t *)item.data.get(), pData, dataSize);
    return addItemToQueue(&item);
}

代码中默认的Item的dataType为GET_GPU_DATA类型,将pData中的数据封装成Item格式并加入队列中。push方法的调用如下:

(new BufContainer())->push(pInputBuf, iInputBufSize);

此时,若需要增加Item 中datatype 的类型又不想修改对原来push(const uint8_t *pData, int dataSize)方法的调用,则修改push方法的声明如下:

bool BufContainer::push(const uint8_t *pData, int dataSize, DWORD dataType = GET_GPU_DATA);

对应的push方法修改如下:

bool BufContainer::push(const uint8_t *pData, int dataSize, DWORD dataType )
{
    if(!pData || (dataSize <=0))
    {
        LOGE << "invaild data";
        return false;
    }
    Item item;
    item.dataSize = dataSize;
    item.datayType = dataType;
    item.data = std::shared_ptr<uint8_t>(new uint8_t[dataSize], std::default_delete<uint8_t[]>());
    item.dataTimeTag = Timer::currentTick();
    memcpy((uint8_t *)item.data.get(), pData, dataSize);
    return addItemToQueue(&item);
}

.
保持原有的push方法调用格式不变,后续增加dataType类型使用如下:

(new BufContainer())->push(pInputBufData, iInputBufDataSize, GET_GPU_CURSOR);

猜你喜欢

转载自blog.csdn.net/ty13438189519/article/details/79881428