假设我们有功能:
templatevoid foo(){...};
检查类型'Kind'是否是C++中类型'Kinds'之一(包括C++ 1z)的最简单方法是什么?
您可以使用以下类型特征:
templatestruct is_one_of { static constexpr bool value = false; }; template struct is_one_of { static constexpr bool value = std::is_same ::value || is_one_of ::value; };
现场演示
更新C++ 17
使用C++ 17模式扩展,不再需要辅助类
templatevoid foo(){ /* The following expands to : * std::is_same_v || std::is_same_v || ... */ if constexpr ((std::is_same_v || ...)) { // expected type } else { // not expected type } };
现场演示