有没有办法在C ++中定义函数体内的返回类型?

时间:2013-10-06 11:02:55

标签: c++ function return return-value return-type

如何在运行时定义函数内部的返回类型?我有一个成员 char * m_data; 我希望在不同的情况下将m_data的转换返回到不同的类型。

?type? getData() const
{
    switch(this->p_header->WAVE_F.bitsPerSample)
    {
        case 8:
        {
            // return type const char *
            break;
        }
        case 16:
        {
            // return type const short *
            break;
        }
        case 32:
        {
            // return type const int *
            break;
        }
    }
}

3 个答案:

答案 0 :(得分:2)

不,但是当你总是返回一个指针时,你只能返回一个void*。请注意调用者无法找出指针后面的内容,因此您最好尝试将返回值包装在boost::variant<char*,short*,int*>boost::any / cdiggins::any

答案 1 :(得分:2)

bitsPerSample制作一个getter,让调用者选择一种合适的方法:

int getBitsPerSample(){
    return p_header->WAVE_F.bitsPerSample;
}

const char* getDataAsCharPtr() {
    // return type const char *
}

const short* getDataAsShortPtr() {
    // return type const short *
}

const int* getDataAsIntPtr() {
    // return type const int *
}

答案 2 :(得分:0)

不是直接的,我建议使用类似的东西:

const char* getDataAsChar() const
{
    if (this->p_header->WAVE_F.bitsPerSample != 8) return nullptr;
    //return data as const char*
}

const short* getDataAsShort() const
{
    if (this->p_header->WAVE_F.bitsPerSample != 16) return nullptr;
    //return data as const short*
}

const int* getDataAsInt() const
{
    if (this->p_header->WAVE_F.bitsPerSample != 32) return nullptr;
    //return data as const int*
}