Может ли std :: function хранить разные сигнатуры функций в C ++ - PullRequest
0 голосов
/ 04 августа 2020

У меня есть несколько функций с одинаковыми типами параметров и номерами, но с разными типами возвращаемых значений. Чтобы найти эти функции, я использую map для хранения их взаимосвязи отображения, но для этого мне нужно определить две карты. код, как показано ниже:

double func_double1(int a, int b) {
  return 0.0;
}

double func_double2(int a, int b) {
  return 0.0;
}

int func_int1(int a, int b) {
  return 0;
}

int func_int2(int a, int b) {
  return 0;
}

using GetDouble = std::function<double(int, int)>;
using GetInt = std::function<int(int, int)>;

std::unordered_map<std::string, GetDouble> double_factory = {
    {"func_double1", func_double1},
    {"func_double2", func_double2}
};

std::unordered_map<std::string, GetInt> double_factory = {
    {"func_int1", func_int1},
    {"func_int2", func_int2}
};

Может ли std :: function хранить разные сигнатуры функций?

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

Или есть способ лучше ?

1 Ответ

1 голос
/ 04 августа 2020

Нет, одна и та же специализация std:: function может содержать только функции с полностью совпадающей сигнатурой.

Но, как вы и ожидали, std::variant и подобные могут иметь разные специализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...