我有一个程序,应该将元素数量调整为它正在使用的设备数量。我有一个config * .txt文件,其中包含一些参数,允许不懂编程语言的用户根据需要调整程序。
例如,到目前为止,所有事情都是这样处理的。在头文件中:
enum
{
// number of input and output channels
kMaxInputChannels = 8,
kMaxOutputChannels = 8
};
typedef struct AudioDriverSettings
{
(...)
ASIOBufferInfo bufferInfos[kMaxInputChannels + kMaxOutputChannels];
ASIOChannelInfo channelInfos[kMaxInputChannels + kMaxOutputChannels];
(...)
} AudioDriverSettings;
typedef struct AudioFileConfig
{
(...)
int inputId[kMaxInputChannels];
int outputId[kMaxOutputChannels];
bool shouldMixInput[kMaxInputChannels];
bool shouldRecordChannel[kMaxInputChannels];
(...)
} AudioFileConfig;
在* .txt中有变量:
NUM_CHANNELS_IN 8
NUM_CHANNELS_OUT 8
在程序启动时,我正在读它并写入变量:
if (!strcmp(tmp_str, "NUM_CHANNELS_IN"))
NUM_CHANNELS_IN = atoi(token);
if (!strcmp(tmp_str, "NUM_CHANNELS_OUT"))
NUM_CHANNELS_OUT = atoi(token);
我希望如下所示生效,但变量需要为常量,因此无效。
int NUM_CHANNELS_IN;
int NUM_CHANNELS_OUT;
typedef struct AudioDriverSettings
{
(...)
ASIOBufferInfo bufferInfos[NUM_CHANNELS_IN + NUM_CHANNELS_OUT];
ASIOChannelInfo channelInfos[NUM_CHANNELS_IN + NUM_CHANNELS_OUT];
(...)
} AudioDriverSettings;
typedef struct AudioFileConfig
{
(...)
int inputId[NUM_CHANNELS_IN];
int outputId[NUM_CHANNELS_OUT];
bool shouldMixInput[NUM_CHANNELS_IN];
bool shouldRecordChannel[NUM_CHANNELS_IN];
(...)
} AudioFileConfig;
有没有简单的方法来处理它?</ p>
答案 0 :(得分:0)
如果这是C,则需要动态分配数组:
ASIOBufferInfo *bufferInfos;
...
bufferInfos = malloc(sizeof(ASIOBufferInfo) * (NUM_CHANNELS_IN + NUM_CHANNELS_OUT));
如果这是C ++,请使用std::vector
类:
std::vector<ASIOBufferInfo> bufferInfos;
...
bufferInfos.reserve(NUM_CHANNELS_IN + NUM_CHANNELS_OUT);
然后push_back
转到vector
。或者:
std::vector<ASIOBufferInfo> bufferInfos(NUM_CHANNELS_IN + NUM_CHANNELS_OUT);
然后只需访问bufferInfos.at(i)
等元素。
答案 1 :(得分:-2)
我相信你要找的答案是使用指针。通过改变:
int NUM_CHANNELS_IN; int NUM_CHANNELS_OUT;
于: int * NUM_CHANNELS_IN; int * NUM_CHANNELS_OUT;
你将能够将你的变量传递出函数等。我不能说你需要对你的代码做出确切的改变,你可能需要用正确的指针语法,但我相信这是如果我正确解释了你的问题,那么最简单的方法来实现你想要做的事情。
希望这有帮助!