我目前在模板上苦苦挣扎:我有一个模板类A,它执行基本数学运算(用于浮点数, double 数,复数),看起来像这样

template <typename T>
class A
{
public:
    void foo(std::vector<std::complex<T>>& result);
};

现在,我可以使用A<double>, A<float>之类的类,但我也想使用A<std::complex<float>>A<std::complex<double>>之类的类。当使用后者时,我希望foo的定义看起来像
void foo(std::vector<std::complex<float>>& result);

而且不喜欢
void foo(std::vector<std::complex<std::complex<float>>>& result);

有什么方法可以为std::complex<T>案例创建一个特定的模板,在该模板中我可以访问“内部”类型?还是这是不可能的/不好的做法?
解决此问题的最优雅方法是什么?

最佳答案

另一种方法可以通过创建类型特征来检测(需要时提取)float类型

template <typename T>
struct getFloatType
 { using type = T; };

template <typename T>
struct getFloatType<std::complex<T>>
 { using type = T; };

并在A中使用它(请参阅fT)
template <typename T>
class A
 {
   public:
      using fT = typename getFloatType<T>::type;

      void foo(std::vector<std::complex<fT>>& result)
       { }
 };

关于c++ - 删除冗余模板类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46989775/

10-11 22:49
查看更多