我想使用类似于其他编程语言中提供的“in”运算符。我已经阅读了许多相关帖子,但没有适合我的需求的。
我想要做的有点不同。请先看以下第一个示例:
#include <iostream>
#include <initializer_list>
#include <algorithm>
bool operator ==(const int lhs, std::initializer_list<int>& il) {
return std::find(il.begin(), il.end(), lhs) != il.end();
}
int main() {
std::initializer_list<int> il{1,2,3,4,5};
std::cout << (3 == il) << '\n';
// std::cout << (3 == {1,2,3,4,5}) << '\n'; // Does not compile
}
但这段代码无法编译。可能是因为初始化列表不是一个表达式。尽管也有例外。std :: initializer_list 可以作为函数参数,但是此处也需要表达式。
由于任何运算符基本上也是一个函数,我希望我也可以将 std :: initalizer_list 用作参数。
但我不能这样做。
我尝试通过定义自己的运算符并通过重载两个运算符的方法来使用该方法。请参见下面:
#include <iostream>
#include <vector>
// New operator: is_in
enum { is_in };
int operator < (const int& lhs, decltype(is_in)) { return lhs; }
int operator > (int lhs, std::vector<int>& rhs) { return std::find(rhs.begin(), rhs.end(), lhs) != rhs.end();}
int operator > (int lhs, std::initializer_list<int>& rhs) { return std::find(rhs.begin(), rhs.end(), lhs) != rhs.end(); }
int main() {
std::vector validValues{ 1, 2, 3, 4, 5 };
bool b = (5 <is_in> validValues);
// bool b = (5 <is_in> { 1, 2, 3, 4, 5 }); // Does not compile
std::cout << b << '\n';
}
同样的原则,同样的问题......
有没有办法让这个实现呢?
std::initializer_list
,作为解决方法... - Jarod42