我目前正在努力使用模板:我有一个模板化的类A
,它执行基本的数学运算(浮点数,双精度数,复数数),看起来像这样
template <typename T>
class A
{
public:
void foo(std::vector<std::complex<T>>& result);
};
Run Code Online (Sandbox Code Playgroud)
现在,我可以使用类一样A<double>, A<float>
,但我也想用它喜欢A<std::complex<float>>
和A<std::complex<double>>
.当使用后者时,我希望foo
看起来像这样的定义
void foo(std::vector<std::complex<float>>& result);
Run Code Online (Sandbox Code Playgroud)
而不是喜欢
void foo(std::vector<std::complex<std::complex<float>>>& result);
Run Code Online (Sandbox Code Playgroud)
有没有办法为std::complex<T>
案例创建一个特定的模板,我可以在其中访问"内部"类型?或者这不可能/不好的做法?解决这个问题最优雅的方法是什么?
另一种方法可以通过创建类型特征来检测浮点类型(在需要时提取)
template <typename T>
struct getFloatType
{ using type = T; };
template <typename T>
struct getFloatType<std::complex<T>>
{ using type = T; };
Run Code Online (Sandbox Code Playgroud)
并在A
(见fT
)中使用它
template <typename T>
class A
{
public:
using fT = typename getFloatType<T>::type;
void foo(std::vector<std::complex<fT>>& result)
{ }
};
Run Code Online (Sandbox Code Playgroud)