我目前在模板上苦苦挣扎:我有一个模板类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/