私は、任意のものを可能な限り無痛でテキストに変換する一連の関数テンプレートを書いています。例えば、 print(std::pair<int, int> {13, 1});
は{13, 1}
と長いC++で同じメモリレイアウトにする必要があるオブジェクトへのキャストを再解析するのは危険ですか?
std::vector<std::tuple<double, std::string>> vect;
for(int i=0;i<3;++i) {
double root = sqrt(i);
vect.push_back({root, "sqrt " + std::to_string(i) });
}
print(vect);
ウィル出力のようなものを出力します:{ {0, "sqrt 0" }, {1, "sqrt 1"}, {1.41421, "sqrt 2"} }
のは、私は、次の構造体があるとしましょう:
struct point { int x, y; };
それはのようなものを書くことはどのように危険です次のコードですか?
std::vector<point> my_points;
//Add points into my_points;
print(reinterpret_cast<const std::vector<std::pair<int, int>>&>(my_points));
これは、GCCでコンパイルし、私は、誰かがコードを移植しようとした場合、それは失敗する可能性が心配ですが、それは、予想される出力を生成します。
std :: vectorとstd :: vector >は異なるクラスなので、reinterpret_castを使用する必要があります。動作は実装に依存する –
user5821508