BlinCT
Шілде 30, 2019, 2:17 Т.Ж.

Определение типа структуры

C++

Всем привет.
В метод передается несколько вариантов структуры. Но принимается как void*
Не спрашивайте почему, я знаю это трешь.
Но все таки, думаю как определить тим структуры что прилетел в метод.
Нашел вроде бы то что надо, С++
Но чет не получается.

void set_data_in(unsigned char op, void* buf, unsigned size)
{
    opcode = op;

    const std::type_info& ti1 = typeid(nvme_id_ctrl);
    const std::type_info& ti2 = typeid(nvme_id_ns);
    const std::type_info& ti3 = typeid(buf);

    if (ti1.hash_code() == ti3.hash_code())
    {
        ctrl_buffer = static_cast<nvme_id_ctrl *>(buf);
    }
    else if (ti2.hash_code() == ti3.hash_code())
    {
        ns_buffer = static_cast<nvme_id_ns *>(buf);
    }

    m_size = size;
}

Может кто подсказать туда ли я начал копать и может я в чем то ошибаюсь чтоыб определить что за структура скрывается в аргументе?
Спасибо.

3

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

3
Alexander
  • Шілде 30, 2019, 11:12 Т.Ж.

ну я бы пошел лучше через шаблоны, такой вопрос а зачем вообще так.что в итоге хочешь получить?

    BlinCT
    • Шілде 30, 2019, 12:41 Т.Қ.

    Шаблоны не вариант, потому что только в 2 естах такой трешь происходит. Это надо мне чтобы проект который рабочий но в ужасном состоянии кода пытаюсь переписать. И это мне бы давало возможность при том же дебаге видить типы и структуры что летят.

      Evgenii Legotckoi
      • Шілде 30, 2019, 12:56 Т.Қ.

      Ну так у тебя же в документации написано, что у std::type_info есть метод name(), используй его.

        Пікірлер

        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
        Кіріңіз немесе Тіркеліңіз