2017-10-07 15 views
0

は今tupleがちょうどrecord SMLであることを、私が試した:レコードとタプルの間の変換?

enter image description here

を、私はこのレコードはタプルを受け入れることができると思いますが、それはエラーを報告上記のコード。

タプルからレコードへ、レコードからタプルへの暗黙的な変換はありません(ただし、ここには投稿しませんでしたが、私は現地で実際に試しました)。 SMLは、このような変換を提供しない理由

私の質問はありますか?メンバーは1からnまでの名前と

答えて

1

タプルはレコードです(これらの変換は、C++でかなり頻繁にあるため)。つまり、3要素タプル(a, b, c)は実際にはレコード{1 = a, 2 = b, 3 = c}です。したがって、タプルとレコードの間の暗黙的な変換は、すでに同じものであるため、必要ありません。

今、あなたが定義した関数はメンバーxyzで記録を取り、あなたはそれをメンバー123でレコードを渡します。これは機能しません。これが機能するには、メンバー名の異なるレコード間の暗黙的な変換が必要になります。これは非常に悪い考えです。

(これらの変換は、C++でかなり頻繁にあるので)

異なるメンバー(または同一の部材)と無関係な構造体またはクラス間のC++には暗黙の変換はありません。これを行うには、reinterpret_cast(またはアドレスにCスタイルのポインタをキャスト)する必要があります。これは一般的ではなく、良いアイデアでもありません(また、PODタイプ以外は使用できません)。

関連する問題