我正在编写 C++,但缺少 Python 的清晰度。但我知道 C++ 一直在发展,我想知道是否有更好的方法来做这样的事情:
if (foo != bar && foo != baz)
在 Python 中我会这样做:
if foo not in {bar, baz}:
C++11 或 C++14 中是否有一个奇特的特性允许我做一些类似可读的事情?
编辑:很多人想知道为什么我要尝试替换这么短的东西。我不是,但我不想让我的示例像原始代码一样丑陋和不可读。它更像是:
if (somelongvariablename.somelongmethodname() !=
SomeReallyLongNamespace::AndAnotherSubClassname::A_LONG_CONSTANT_NAME &&
somelongvariablename.somelongmethodname() !=
SomeReallyLongNamespace::AndAnotherSubClassname::ANOTHER_LONG_CONSTANT_NAME) {
// foo
最佳答案
这样的事情怎么样:
#include <type_traits>
#include <tuple>
#include <utility>
template <typename ...Args> struct InT: std::tuple<Args...>
{
template <typename ...Brgs>
explicit InT(Brgs &&... brgs)
: std::tuple<Args...>(std::forward<Brgs>(brgs)...) {}
template <typename T, std::size_t ...I>
bool noteq(T && t, std::index_sequence<I...>) const
{
return (true && ... && (t != std::get<I>(*this)));
}
};
template <typename ...Args>
InT<Args &&...> AnyOf(Args &&... args)
{
return InT<Args &&...>(std::forward<Args>(args)...);
}
template <typename T, typename ...Args>
bool operator!=(T && t, InT<Args...> in)
{
return in.noteq(std::forward<T>(t), std::index_sequence_for<Args...>());
}
用法:
if (x != AnyOf(1, 3, 5)) { f(); }
关于c++ - 在 C++11/14 中说 "foo not in {bar, baz}"的漂亮方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37887064/