bool is(std::vector<TokenType> types);
bool is(std::vector<Operators> values);
bool is(std::vector<Separators> values);
TokenType, Operators, Separators - енамы.
Пример вызова:
token.is({Operators::ADD, Operators::SUB})
Если я делаю такую перегрузку, то можно ли гарантировать, что вызовется нужная перегрузка при условии, что я передаю значения в явном виде (Например, Operators::ADD) и значения в енамах инты?
забавно, что если написать только один элемент в векторе, то компилятору не очевидно, какой метод нужно выполнять D:/univer/5_semester/tiny-tiny-pascal/src/simple_parser/simple_parser.cpp:38:17: error: call of overloaded 'is(<brace-enclosed initializer list>)' is ambiguous 38 | if (token.is({TokenType::ID})) { | ~~~~~~~~^~~~~~~~~~~~~~~~~ In file included from D:/univer/5_semester/tiny-tiny-pascal/src/scanner/scanner.h:10, from D:/univer/5_semester/tiny-tiny-pascal/src/simple_parser/simple_parser.h:6, from D:/univer/5_semester/tiny-tiny-pascal/src/simple_parser/simple_parser.cpp:1: D:/univer/5_semester/tiny-tiny-pascal/src/scanner/token.h:196:10: note: candidate: 'bool scanner::Token::is(const std::vector<scanner::TokenType>&)' 196 | bool is(const std::vector<TokenType> &types); | ^~ D:/univer/5_semester/tiny-tiny-pascal/src/scanner/token.h:197:10: note: candidate: 'bool scanner::Token::is(const std::vector<scanner::Operators>&)' 197 | bool is(const std::vector<Operators> &values); | ^~ D:/univer/5_semester/tiny-tiny-pascal/src/scanner/token.h:198:10: note: candidate: 'bool scanner::Token::is(const std::vector<scanner::Separators>&)' 198 | bool is(const std::vector<Separators> &values); | ^~ ninja: build stopped: subcommand failed.
Обсуждают сегодня