给定一个可能是也可能不是类型的任意数字类型std::complex
,我想获得代表该类型“真实部分”的类型。例如, is 的实部, std::complex<double>
is的实double
部。下面的示例使用 C++ 部分模板特化来完成此操作。@mfontanini 在下面发布了一个更简单的方法。double
double
我的问题:Boost 库中是否有直接的方法可以做到这一点?如果是这样,我一直找不到它。
#include <complex>
#include <boost/type_traits/is_complex.hpp>
template <typename T>
class RealPart
{
private:
template <bool, typename>
class ResultType;
// complex type -> real type
template <typename T1>
class ResultType<true, T1>
{
public:
typedef typename T1::value_type type;
};
// real type -> real type
template <typename T1>
class ResultType<false, T1>
{
public:
typedef T1 type;
};
public:
// define result_type, making use of the template specialization above
typedef typename ResultType<boost::is_complex<T>::value, T>::type result_type;
};
// both will become doubles
RealPart<std::complex<double> > a;
RealPart<double> b;