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 何らかの理由で独自の複素数を作成する予定であり、複素数ゼロまたは実数ゼロを作成する方法をコードに指示する必要があるため、2 つのケースでベクトルを埋めたい理由。しかし、テストのために、組み込みのデータ型で動作させることさえできません