我不确定该如何命名这个问题,但我正在使用MFC c ++在Visual Studio 2015中处理gui。
我有一个看起来像这样的结构
static dataCollect::StatSrcListL_t s_struct9[] =
{
// Name Addr Type Mask Stride User
{ "Rx PMA Reset Done", statsRW::statMode9egrDeltDat, dataCollect::Irg, statMode9egrDelt_rxPmaRstDoneMask, 0x000 },
{ "Rx Reset Done", statsRW::statMode9egrDeltDat, dataCollect::Irg, statMode9egrDelt_rxResetDoneMask, 0x0000 },
{ "Rx Buffer Underflow", statsRW::statMode9egrDeltDat, dataCollect::IrgErr, statMode9egrDelt_rxBufUflwMask, 0x0000 },
{ "Rx Buffer AE", statsRW::statMode9egrDeltDat, dataCollect::IrgErr, statMode9egrDelt_rxBufAeMask, 0x0000 },
{ "Rx Buffer AF", statsRW::statMode9egrDeltDat, dataCollect::IrgErr, statMode9egrDelt_rxBufAfMask, 0x0000 },
{ "Rx Buffer Overflow", statsRW::statMode9egrDeltDat, dataCollect::IrgErr, statMode9egrDelt_rxBufOflwMask, 0x0000 },
{ "PRBS Err Det", statsRW::statMode9egrDeltDat, dataCollect::IrgErr, statMode9egrDelt_prbsErrMask, 0x0000 },
{ "PRBS Lck Det", statsRW::statMode9egrDeltDat, dataCollect::Irg, statMode9egrDelt_prbsLckMask, 0x0000 },
{ "Tx Reset Done", statsRW::statMode9ingDeltDat, dataCollect::Irg, statMode9ingDelt_txRstDoneMask, 0x000 },
{ "Tx PMA Reset Done", statsRW::statMode9ingDeltDat, dataCollect::Irg, statMode9ingDelt_txPmaRstDoneMask, 0x000 },
{ "Tx Buf OFlow/Uflow", statsRW::statMode9ingDeltDat, dataCollect::IrgErr, statMode9ingDelt_txBufOfUfMask, 0x0000 },
{ "Pwr Good", statsRW::statMode9ingDeltDat, dataCollect::Irg, statMode9ingDelt_pwrGoodMask, 0x000 },
{ "QPLL Lock Status", statsRW::statMode9ingDeltDat, dataCollect::Irg, 1 << statMode9ingDelt_qpllLock, 0x000 }
};
我一直在尝试使用不同的方法来statMode9egrDeltDat
动态分配数字。根据所使用的项目,它可以在大约10到50个之间进行,并且在代码中单独写入50次似乎有点浪费时间和空间。一切都是一样的,除了数字9(在这个例子中)将从0,1,2,3开始,依此类推。
所以我的问题是,如何将上述代码放入循环中以将数字增加到指定的数字。
答案 0 :(得分:0)
看起来您正在尝试动态地为您的阵列创建令牌。正如其他人在评论中提到的那样,使用类初始化数组或使用其他数据结构(如std :: map)可能是更好的设计。
但是这可能会对您有所帮助:看看## (token-pasting) operator
。这是一个用于将参数转换为标记的预处理器运算符。以下是它的用法示例。
#include <iostream>
#define makevar(n) prefix ## n ## suffix
int main()
{
auto makevar(1) = 1;
std::cout << prefix1suffix << std::endl;
return 0;
}
1
答案 1 :(得分:0)
我能够找出部分解决方案。它不是我需要的100%,但它足以继续现在的工作。
static dataCollect::StatSrcListL_t s_struct[10][(sizeof(s_struct9) / sizeof(dataCollect::StatSrcListLedL_t))];
for (int i = 0; i < NumTables; i++) {
(dataCollect::StatSrcListL_t*) memcpy(&s_struct[i], s_struct9, sizeof(s_struct9));
for (int j = 0; j < (sizeof(s_struct9) / sizeof(dataCollect::StatSrcListL_t)); j++)
{
s_struct[i][j].address = s_struct[i][j].address + offset;
}
offset += (statsRW::statMode9egrDeltDat - statsRW::statMode8egrDeltDat);
}