在<short> <double> C++ 中static_cast复杂到复杂
static_cast complex<short> to complex<double> in c++
我想用static_cast将复杂<短>转换为复杂的<双>。双>短>
将复数
我正在尝试做与这篇文章中相同的事情,但我需要使用static_cast。我不能使用该解决方案的原因是因为我使用的是在其 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> >();
如果没有这样的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>));
其中,用于转换复合体的函数可能如下所示:
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()) };
}
我担心没有启发性的答案。您可以扩展std::complex
以提供转换运算符:
#include <complex>
#include <iostream>
template<class T, class U>
struct castable_complex : std::complex<T>
{
castable_complex() = default;
castable_complex(T real, T imag) : std::complex<T>(real, imag) {}
// more constructed needed I guess...
operator std::complex<U>() const
{
return { static_cast<U>(this->real()), static_cast<U>(this->imag()) };
}
};
int main()
{
auto z = castable_complex<double, int> { 3.14, 1.618 };
auto w = static_cast<std::complex<int>>(z);
std::cout << "w = " << w.real() << " + i." << w.imag() << "n";
}
演示:http://coliru.stacked-crooked.com/a/c38fe81c92d8664e
最简单的是专攻Eigen::internal::cast
:
template<>
inline std::complex<double> cast(const std::complex<short>& x) {
return std::complex<double>(std::real(x),std::imag(x));
}
在这里演示。
相关文章:
- 函数复杂度分析
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 呼叫运营商<<临时
- while循环中while循环的时间复杂度是多少
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 使用 Python Extension API 包装复杂C++类
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- 计算两个代码块的时间复杂度
- 将平面阵列重塑为复杂的特征类型
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 如何在复杂继承中访问静态成员变量
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- OpenCV 傅里叶变换复杂输出问题