首页 > 解决方案 > static_cast 复合体复杂的在 C++ 中

问题描述

我想使用 static_cast 将 complex<short> 转换为 complex<double>。

将 complex<int16_t> 转换为 complex<double>

我正在尝试做与这篇文章相同的事情,但我需要使用 static_cast。我不能使用该解决方案的原因是因为我使用的是 Eigen,它在其 cast() 函数中使用了 static_cast。有没有办法扩展 static_cast 的功能以这种方式转换?或者有没有办法扩展 Eigen 的 cast() 函数来处理这种转换?

这基本上是我正在尝试的:

Eigen::Array<std::complex<short>, Eigen::Dynamic, 1> short_array;
Eigen::Array<std::complex<double>, Eigen::Dynamic, 1> double_array;
double_array = short_array.cast< std::complex<double> >();

标签: c++c++11castingeigenstatic-cast

解决方案


如果没有这样的功能,我会这样做cast

Eigen::Array<std::complex<short>, Eigen::Dynamic, 1> short_array;
Eigen::Array<std::complex<double>, Eigen::Dynamic, 1> double_array;
double_array = short_array.unaryExpr(ptr_fun(complex_cast<double, short>));

用于铸造 complex 的函数可能如下所示:

template<class T, class U>
std::complex<T> complex_cast(const std::complex<U> &c) {
    return { static_cast<T>(c.real()), static_cast<T>(c.imag()) };
}

推荐阅读