Почтовый ящик попасть в SimGrid

#c #simgrid

Вопрос:

Я изучаю почтовые ящики в simgrid, просматривая примеры из документации, однако, когда я пытаюсь скомпилировать примеры, возникают ошибки, в основном в почтовом ящике-> получить. Я помещу фрагмент кода ниже.

 if (rank == 0) {
  /* The root actor (rank 0) first sends the token then waits to receive it back */
  XBT_INFO("Host "%u" send 'Token' to Host "%s"", rank, neighbor_mailbox->get_cname());
  std::string msg = "Token";
  neighbor_mailbox->put(amp;msg, token_size);
  const auto* res = my_mailbox->get<std::string>();
  XBT_INFO("Host "%u" received "%s"", rank, res->c_str());
} else {
  auto* res = my_mailbox->get<std::string>();
  XBT_INFO("Host "%u" received "%s"", rank, res->c_str());
  XBT_INFO("Host "%u" send 'Token' to Host "%s"", rank, neighbor_mailbox->get_cname());
  neighbor_mailbox->put(res, token_size);
}
 

ошибка возникает в const auto res = my_mailbox->getstd::строка();

Ошибка: невозможно вывести тип «авто», и имя типа не разрешено

Комментарии:

1. Я предполагаю, что my_mailbox->get<std::string>() это не возвращает указатель. Вы уверены, что он не возвращает std::string значение по или ( const ?) ссылку?

2. Да, похоже, что ошибка все-таки была в синтаксисе. Мне удается исправить это с помощью const auto *res = static_cast<std::string*>(my_mailbox->get());

Ответ №1:

Заменить auto* res = my_mailbox->get<std::string>(); на const auto *res = static_cast<std::string*>(my_mailbox->get());