从文件中读取数组大小
Reading array size from file
我有一个程序应该根据它正在使用的设备数量调整元素数量。我有一个配置 *.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;
有什么简单的方法可以处理吗?
我相信您正在寻找的答案是使用指针。通过更改:
整数NUM_CHANNELS_IN;
整数 NUM_CHANNELS_OUT;
致:
整数 *NUM_CHANNELS_IN;
整数 *NUM_CHANNELS_OUT;
您将能够将您的变量传递出函数等。我无法说出您需要对代码进行的确切更改,您可能需要复习一下指针的正确语法,但我相信这一点如果我正确解释了您的问题,这是实现您想要做的事情的最简单方法。
希望对您有所帮助!
如果这是 C,您需要动态分配数组:
ASIOBufferInfo *bufferInfos;
...
bufferInfos = malloc(sizeof(ASIOBufferInfo) * (NUM_CHANNELS_IN + NUM_CHANNELS_OUT));
如果这是 C++,请使用 std::vector
class:
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)
.
等元素
我有一个程序应该根据它正在使用的设备数量调整元素数量。我有一个配置 *.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;
有什么简单的方法可以处理吗?
我相信您正在寻找的答案是使用指针。通过更改:
整数NUM_CHANNELS_IN; 整数 NUM_CHANNELS_OUT;
致: 整数 *NUM_CHANNELS_IN; 整数 *NUM_CHANNELS_OUT;
您将能够将您的变量传递出函数等。我无法说出您需要对代码进行的确切更改,您可能需要复习一下指针的正确语法,但我相信这一点如果我正确解释了您的问题,这是实现您想要做的事情的最简单方法。
希望对您有所帮助!
如果这是 C,您需要动态分配数组:
ASIOBufferInfo *bufferInfos;
...
bufferInfos = malloc(sizeof(ASIOBufferInfo) * (NUM_CHANNELS_IN + NUM_CHANNELS_OUT));
如果这是 C++,请使用 std::vector
class:
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)
.