Omnet ++:多维矢量作为输入

时间:2016-11-28 12:59:49

标签: c++ omnet++

我设法将一个向量作为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"

任何想法如何克服这样的问题?

1 个答案:

答案 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++;
}

注意:

  1. 您必须事先知道阵列的尺寸。

  2. 要使用多行在omnetpp.ini中编写字符串参数,您应该在每行的末尾添加反斜杠,但最后一行,例如:

    **.setGate = "true true false,\
                  false false false"