我设法将一个向量作为omnetpp.ini的输入作为字符串,并按照下面的方式用作bool,
//omnetpp.ini
**.setGate = "true false false false true false false"
//mynetwork.cc
bool MyQueue::gateState()
{
// reading input from omnetpp.ini as string
const char *vstr = par("setGate").stringValue();
std::vector<std::string> v = cStringTokenizer(vstr).asVector();
//Converting String Vector as bool Vector
bool mygate[6];
for (int x = 6; x>=0; x--){
if (v[x] == "true")
mygate[x] = true;
else mygate[x] = false;
...
};
我没有在Omnet ++手册中找到允许我按照下面的方式进行多维输入的任何内容,
//omnetpp.ini
**.setGate = "true false false false true false false,
false false false false false false false,
true false false false true false false"
任何想法如何克服这样的问题?
答案 0 :(得分:1)
没有简单的方法来读取多维数组。使用cStringTokenizer
可能是最好的主意。我建议使用以下代码来读取该数组:
bool gatesBool[10][10]; // let's assume these dimensions
const char * tableStr = par("setGate").stringValue();
cStringTokenizer table(tableStr, ","); // a comma separates rows
int x = 0;
while (table.hasMoreTokens()) {
cStringTokenizer row(table.nextToken(), " "); // a space separates elements
int y = 0;
while (row.hasMoreTokens()) {
if (strcmp(row.nextToken(), "true") == 0) {
gatesBool[x][y] = true;
} else {
gatesBool[x][y] = false;
}
y++;
}
x++;
}
注意:
您必须事先知道阵列的尺寸。
要使用多行在omnetpp.ini
中编写字符串参数,您应该在每行的末尾添加反斜杠,但最后一行,例如:
**.setGate = "true true false,\
false false false"