#cpp #cpp11
Есть ли в c++ возможность, позволяющая применять оператор для нескольких объектов? Короче, что-то типа этого: int i = 5; if (i == { 1, 2, 3, 5 } ) // if (i == 1 || i == 2 ...) { cout << "Hello world!" << endl; }
Ответы
Ответ 1
В комментарий не помещаюсь... Чтоб одним оператором и именно == templateclass Has { private: vector data; public: explicit Has(initializer_list lst):data(lst){} bool operator ==(const T& value) const { return find(data.cbegin(),data.cend(),value) == data.cend(); } }; template Has in(initializer_list lst) { return Has (lst); } int main() { int i = 5; if (in({1,2,3,4,7,8}) == i) // Без in - if (Has ({1,2,3,4,7,8}) == i) { cout << "Found\n"; } } Это путь чуть длиннее, но зато не нужно писать явно тип - ну, in . Если через функцию - то можно воспользоваться функцией с переменным числом аргументов. Но стоит ли эта овчинка выделки? Ответ 2
Непосредственно такой синтаксис не поддерживается. Чтобы реализовать нечто подобное без создания дополнительных классов можно использовать std::set: if (std::set{1, 2, 3, 5}.count(i)) { // ... } Если компилятор поддерживает c++17, то тип элементов std::set может быть выведен из списка инициализации и явное указание не потребуется. if (std::set{1, 2, 3, 5}.count(i)) { // ... } Подробнее об этом есть в соответствующем вопросе: Новые правила выведения шаблонного типа в c++17
Комментариев нет:
Отправить комментарий