解決しようとしている問題:KotlinのC++列挙型同等物
私は要素のリストを持っています。リストは大きく、多くのものが存在する可能性があります。私はインデックスでそれらにアクセスしたいと思います。それらの索引については、数字の代わりに単語を使用したいと考えています。私はこの言葉が強く型付けされていることも望みたいので、数字を混ぜることはできません。
私は、すべての列挙がオブジェクトインスタンスそのものであるため、Kotlin列挙型はこれには適していないと信じています。私はInt定数を使うことができますが、型の安全性を失います。
この問題はEnumによって解決されます。列挙は、索引として使用するために、基本的な型(コンパイル時)にキャストすることができます。同じ型のEnumは型であり、関数がそれをパラメータとして受け取った場合、コンパイラは整数を渡すことを許可しません。列挙自体はオブジェクトではないため、パフォーマンスヒットなしに好きなだけ多くすることができます。
はこれにそれを削除し、あなたが二= 1の後ろにカンマを持ってstring someArray[] = {"element 0", "element 1"};
enum class Index
{
first = 0,
second = 1,
};
string getElement(Index i)
{
return someArray[(int)i];
}
void foo()
{
auto element0 = getElement(Index::first);
auto element1 = getElement(1); // compile time error - parameter type mismatch
}
"すべての列挙がオブジェクトインスタンスそのものなので、Kotlin列挙型はこれには適していないと私は信じています。 JVMの列挙型はシングルトンのインスタンスです。オブジェクトの作成が心配な場合は、列挙型の各値に対して1つのオブジェクトインスタンスを作成します。それとも私はあなたの意見を誤解しましたか? – zsmb13
@ zsmb13インデックス定数としてenumを使用するので、シングルトンオブジェクトを作成する必要はありません。リストには何千もの要素が存在する可能性があるため、数千のインデックスが存在する可能性があります。非常に多くのオブジェクトを作成するには、不必要なオーバーヘッドのようです。 – rozina