[英]Reading array size from file
我有一個程序,可以根據要使用的設備數來調整元素數量。 我有一個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);
我想獲得如下效果,但是變量需要為const,所以它不起作用。
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);
然后push_back
入vector
。 要么:
std::vector<ASIOBufferInfo> bufferInfos(NUM_CHANNELS_IN + NUM_CHANNELS_OUT);
然后只需訪問諸如bufferInfos.at(i)
類的元素。
我相信您正在尋找的答案是使用指針。 通過更改:
int NUM_CHANNELS_IN; int NUM_CHANNELS_OUT;
到:int * NUM_CHANNELS_IN; int * NUM_CHANNELS_OUT;
您將能夠從函數等中傳遞變量。我不能說您需要對代碼進行確切的更改,您可能需要重新編寫指針的正確語法,但是我相信這是最簡單的方法如果我正確解釋了您的問題,請實現您想要做的事情。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.