1
給定一個任意的數字類型,這可能是也可能不是一個std::complex
類型,我想獲得代表該類型「真實部分」的類型。例如,std::complex<double>
的實數部分是double
,double
的實數部分是double
本身。下面的例子使用C++部分模板特化來實現這一點。 @mfontanini發佈了一個更簡單的方法。如何確定任意C++數值類型的實部類型?
我的問題:是否有直接的方式來做到這一點已經在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;
感謝您的注意! – 2013-02-17 20:21:23