我有一个程序,它应该根据使用的设备数量调整元素数量。我有一个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;
有什么简单的方法可以处理它吗?
如果这是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);
然后CCD_ 2到CCD_。或者:
std::vector<ASIOBufferInfo> bufferInfos(NUM_CHANNELS_IN + NUM_CHANNELS_OUT);
然后只访问像CCD_ 4这样的元素。
我相信您正在寻找的答案是使用指针。通过从更改:
int NUM_CHANNELS_IN;int NUM_CHANNELS_OUT;
收件人:int*NUM_CHANNELS_IN;int*NUM_CHANNELS_OUT;
你将能够将变量从函数中传递出去。我不能说你需要对代码进行的确切更改,你可能需要复习指针的正确语法。但我相信,如果我正确解释了你的问题,这是实现你想要做的事情的最简单方法。
希望这能有所帮助!