gpt4 book ai didi

c++ - 删除冗余模板类型

转载 作者:可可西里 更新时间:2023-11-01 16:39:10 25 4
gpt4 key购买 nike

我目前正在与模板作斗争:我有一个模板类 A ,它执行基本数学运算(对于 float 、 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> 创建一个特定的模板?在哪些情况下我可以访问“内部”类型?或者这是不可能的/不好的做法?解决这个问题最优雅的方法是什么?

最佳答案

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com