我想仿效Python的in
運算符在C + +(11),使用immedate值,你可以在Python中。如:一個C++的「in」運算符沒有cruft?
if x in (1, 2, 3): ...
在C++ 11,看來我接近能夠做到這一點:
if (IsIn(x, { 1, 2, 3 }))
{
}
template<typename Val, Container cont>
bool IsIn(Val const &val, Container const &cont)
{
return boost::find(cont, val) != cont.end();
}
但(以g ++ - 4.8)我得到:
error: no matching function for call to 'IsIn(MyType&, <brace-enclosed initializer list>)'
我知道我能做到這一點,但是這是一個很大的克魯夫特:
if (IsIn(x, std::initializer_list<MyType>{1, 2, 3 })) ...
什麼是優雅的解決方案?
更新:我對編譯時間和運行時間沒有足夠的瞭解,我仍然無法確定是否有明確的勝利者。我的IsIn(x, {})
肯定會有更多的運行時循環開銷並複製initializer_list值,但也適用於任何容器。 ... == any_of(...
機制肯定會編譯成更嚴格的代碼,並不複製,但只適用於立即數(這是我的原始示例),而不是容器,並且sytax(對我來說)似乎不太直截了當。
由於這是一種領帶,我將其授予貢獻者感謝。
感謝大家的討論!
另一種方法,你可能會做類似的事情:http://coliru.stacked-crooked。com/a/3bcf0c0b56b47ce3 –
你可以看看[named-operators-in-C++](http://codereview.stackexchange.com/questions/23179/named-operators-in-c)或https://github.com/klmr/named-operator用於* named-operator *能夠使用'if(x {1,2,3})'語法 –
Jarod42