Во-первых, я должен указать, что это мой первый вопрос о стеке, поэтому, пожалуйста, несите меня.Перегруженная функция неоднозначности
У меня возникли проблемы с перегрузкой функции в C++. Я пытаюсь создать функцию со следующими прототипами:
void push_at_command(std::string, std::vector<std::string>, int);
void push_at_command(std::string, std::vector<std::string>, std::vector<std::string>, int);
void push_at_command(std::string, std::vector<std::string>, std::vector<std::string>, std::vector<std::string>, int);
void push_at_command(std::string, std::vector<std::string>, bool, int);
Я изначально хотел последнюю перегрузку (тот с булевым) принять повышающий :: регулярного выражения вместо строки вектора;
void push_at_command(std::string, boost::regex, int);
, но столкнулся с ошибками неоднозначности ... так просто, чтобы быстро получить код «работающий» Я думал, что я хотел бы добавить прототип принять флаг и использовать первый элемент в векторе для хранения регулярных выражений string, но я, похоже, сталкиваюсь с аналогичными проблемами с булевым.
Это, как я пытаюсь вызвать эти различные перегрузки:
push_at_command(
"AT?S",
boost::assign::list_of("(\\d{3}.\\d{3})"),
true,
0);
push_at_command(
"AT?S",
boost::assign::list_of("L11")("L12"),
0);
push_at_command(
"AT?S",
boost::assign::list_of("L11"),
boost::assign::list_of("L21")("L22"),
0);
И это ошибка, я получаю:
error: call of overloaded ‘push_at_command(const char [5], boost::assign_detail::generic_list<char [4]>, boost::assign_detail::generic_list<char [4]>, int)’ is ambiguous
note: candidates are:
note: void push_at_command(std::string, std::vector<std::basic_string<char> >, std::vector<std::basic_string<char> >, int)
note: void push_at_command(std::string, std::vector<std::basic_string<char> >, bool, int)
... который относится к третьей функции вызов.
Просто отметим, что у меня не было проблем, прежде чем я добавил перегрузку с помощью bool (или изменил вектор строки на регулярное выражение).
Я предполагаю, что проблема имеет какое-то отношение ко мне, используя boost :: assign в вызове функции, и я понимаю, что мне это не нужно, но мне действительно нужны вызовы функций «одна линия». ... Любые советы приветствуются, поскольку я довольно новичок в C++.
Благодаря
Мой личный совет: Ваша жизнь будет более счастливой, если вы избежите синтаксической перегрузки. –
Спасибо за совет, я думаю, вы можете быть правы! –