Как напечатать массив, в котором некоторые значения должны быть напечатаны с указанным поведением c? - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь создать JVM. Во-первых, у меня есть вектор с кодами операций и строками, которые их представляют. Это инициализируется так:

Opcodes::Opcodes():
opcodes(0xff + 1, "Not implemented")
{
    opcodes[0x2A] = "aload_0";
    opcodes[0x2B] = "aload_1";
    opcodes[0x2C] = "aload_2";
    opcodes[0x2D] = "aload_3";
    opcodes[0xB7] = "invokespecial";
}

Учитывая код операции, я хочу напечатать его, это код до сих пор:

std::string Opcodes::getString(u1 opcode)
{
    try
    {
        return Opcodes::getInstance().opcodes.at(opcode);
    }
    catch (const std::out_of_range &e)
    {
        return "Opcode too large";
    }
}

void Opcodes::printCode(std::ostream& out, u1 code[], u4 codeLength)
{
    for (u4 i = 0; i < codeLength; i++)
    {
        out << Opcodes::getString(code[i]) << std::endl;
    }
}

Будет много кодов операций. Для многих кодов операций мне просто нужно получить код операции и распечатать его. Но для других я должен использовать другой подход, например, в методе printCode () , если я читаю код операции invokespecial , я должен напечатать два следующих кода операции в коде массив ( code [] ) иначе, чем просто взять его из вектора кодов операций или просто игнорировать их (не печатать).

Как я могу сделать это хорошим способом ? Что может быть хорошим подходом для этого?

Я мог бы просто использовать , если или switch , но это будет действительно , если Я не думаю, что это хорошо, звучит грязно. Я думал об использовании лямбда как-нибудь. Я слышал о шаблоне под названием command , возможно, он может быть полезен. Что ты думаешь?

...