在C++中模拟 python 的"in"
Simulating python's "in" in C++
我设法找出了像python中的确切语法(检查容器中是否存在值(,因此您可以检查值是否"在"任何支持begin()
/end()
方法的容器中。
这是我的实现:
#include <algorithm>
#include <iostream>
#include <vector>
template<class T>
struct specified {
specified(T const& value) : value_(value) {}
T value_;
template<class Container>
bool operator * (Container const& cont) {
return (std::find(cont.begin(), cont.end(), value_) != cont.end());
}
};
struct general {
template<class T>
friend specified<T> operator *(T const& rhs, general const&) {
return specified<T>(rhs);
}
};
#define in * general() *
int main() {
std::vector<int> vec{1,2,3};
std::cout << 1 in vec << std::endl;
std::cout << 4 in vec << std::endl;
}
住在科里鲁
我的问题是,它有什么陷阱吗?安全吗?
编辑:
支持字符串文本
它对字符串有一个小的解决方法。
不能按预期处理字符串文本。
std::vector<string> vec{"1","2","3"};
std::cout << "1" in vec << std::endl;
std::cout << "4" in vec << std::endl;
此代码会导致编译时错误。
error: array used as initializer
specified(T const& value) : value_(value) {}
C++将字符串文字视为char[]
,而不是将其视为string
。所以我们需要明确提到它。
std::cout << string("1") in vec << std::endl;
不,这是
不安全的,因为您正在使用#define
.添加一条看起来完全无害的线条
void foo(int in) { }
就在你主的之前,会破坏代码。在这种情况下,错误消息非常清楚,但通常不是。
我知道引入新的语法和很酷的东西非常诱人,但使用宏不是要走的路。无论如何,老实说,如果我必须使用您的代码,我更愿意看到一个
std::find(cont.begin(), cont.end(), value_) != cont.end()
我只看那条线而不是
value_ in cont
为此,我必须研究一些代码才能真正理解它的含义。
相关文章:
- 如何使用列表/数组在C++中实现 Python "... not in ..."?
- 如何将 'in' 关键字从 python 翻译成 c++?
- a,b = b,a in python vs std::swap() in C++
- C++ Python 循环"for i, num in enumerate(list):"版本
- SWIG - C++ code in python
- Python的"in"运算符的C++等价物是什么?
- 有没有等效于Python的c++"in"关键字?
- 在C++中模拟 python 的"in"
- LDA in Opencv python
- 包装一个使用char**[in/out]的C函数调用,以在cython中返回一个python列表
- "for num in [1,4,5]" Python 等效于 C++?
- Cprofile (Python) in C++?
- python linspace in c++
- C++ 中是否有 Python 的 "in" 函数的等效项?
- Python lambda in C++
- Python's struct.pack/unpack 等价性 in C++
- C++ map<int, int> in Python
- 我如何将一个ease in out函数从c++翻译成python ?
- C++相当于Python的"if x in [string1, string2, …]"
- 在索引和值"for i, v in enumerate(listVar):"上是否有 C++/C++11 类似于 python 迭代?