如何判断模板参数是否为std::complex
?我想要一个支持所有数据类型(如 float、double、int 等)的通用方法。
我知道使用 std::is_same 我可以专门检查给定类型,例如,std::complex<float>
。
但这里我需要一个通用的方法。
这可以使用部分模板专门化来完成。
首先定义一个默认为 false 的包罗万象的模板:
template<typename T>
struct is_complex_t : public std::false_type {};
然后,您为符合您的条件的类型提供重载:
template<typename T>
struct is_complex_t<std::complex<T>> : public std::true_type {};
我还想添加一个实用函数:
template<typename T>
constexpr bool is_complex() { return is_complex_t<T>::value; }
编辑:此实用程序函数在 c++14 及更高版本中不需要或无用,因为 std::integral 类型实现了operator()。
Usage:
bool int_is_complex = is_complex<int>(); //false
bool complex_is_complex = is_complex<std::complex<float>>(); //true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)