我有一段代码可以使用 RTTI 作为案例选择器
#include <iostream>
#include <vector>
#include <typeinfo>
#include <complex>
#include <algorithm>
using namespace std;
typedef complex<int> data;
typedef std::vector< data > List;
template <typename T> void zeros(T &v)
{
if (typeid(typename T::value_type)==typeid(complex<int>))
std::fill(v.begin(), v.end(), complex<int>(0, 0));
else std::fill(v.begin(), v.end(), static_cast<typename T::value_type>(0));
}
int main(int argc, char *argv[])
{
List A;
zeros(A);
return 0;
}
在上面的代码中,我使用 typename T::value_type 来确定列表的数据类型,如果有复数,那么我将用复数零填充列表。否则,将其设为对应类型的零。在上面的代码中,如果我将数据设置为 int,它确实可以编译并运行,没有任何问题。但是,如果我将其设置为另一种其他类型,则无法编译。我想知道是否有任何方法可以使上述代码适用于不同类型的数据(对于 float、double、long、int、complex、complex 和 complex)。
ps 我想在两种情况下填充向量的原因是因为出于某种原因我要创建自己的复数,并且我必须告诉代码如何创建复数零或实零。但是对于测试,我什至无法使用内置数据类型