如何在运行时定义函数内部的返回类型?我有一个成员 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;
}
}
}
答案 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*
}