我确信这个问题在这里已经被感动了很多次,但是我真的找不到我所遇到的问题类型的答案。我有一个需要在其中保存数组的类。但是该数组的类型是可靠的(确切地说,取决于打开的wave文件的比特率是多少,例如8位-char,16位-short等)。我需要在类方法之一中定义它。

我的想法是使用auto关键字声明指针:

class WaveReader {

//

auto *data;

};

然后,在方法内部:
void some_func(int datasize)
{
    //
    case 8:
      data = new char[datasize];
      break;
    case 16:
      data = new short[datasize];
      break;
    //
    etc.
}

但这是一个愚蠢的主意。我知道最简单的方法是为每种类型声明数组,但是我想知道是否存在一种聪明的方法,也许可以使用一些模板?
非常感谢您的帮助。

最佳答案

auto关键字不是为此设计的,将数据声明为:

void* data;

然后,您可以仅使用int或enum来跟踪数据类型。如,
typedef enum
{
    CHAR,
    SHORT
} DataTypeEnum;
...
DataTypeEnum dataType;
...

并如下修改您的代码:
void some_func(int datasize)
{
    //
    case 8:
      data = static_cast<void*>(new char[datasize]);
      dataType = CHAR;
      break;
    case 16:
      data = static_cast<void*>(new short[datasize]);
      dataType = SHORT;
      break;
    //
    etc.
}
...
if( dataType == CHAR )
{
    ...
}
else if ( dataType == SHORT )
{
    ...
}

关于c++ - 编译时对象类型未知的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17810265/

10-11 22:11
查看更多