-2

ユーザーが使用したいデータのタイプを選択できるようにしました。たとえば、long や double などを使用したい場合などです。最初に変数の名前を宣言してから、そのタイプを設定したいと思います。C++で可能ですか?

4

4 に答える 4

2

私があなたの質問を正しく理解した場合、あなたはこれをしたいと思います:

declare variable;

// in the program:
variable = (int) anotherVariable;

短い答え:

いいえ

長い答え:

avoid *はまさにこれを行います。逆参照する前に、明示的に別の型に変換する必要があります。ただし、これはsではない変数では不可能void *です。

void *variable = NULL;
int someIntVariable = 100;
int *someIntPointer = NULL;
variable = &someIntVariable;
someIntPointer = (int *)variable;
.. // but this seems unncessary.
于 2013-03-10T12:59:23.293 に答える
0

(Windowsを使用してVARIANTいる場合)または他のプラットフォームで同様のものを使用することを検討してください。重要なのVARIANTは、すべての種類のデータ型を格納できるのはユニオンですが、一度に1つの特定の型のみを格納できるということです。このようにして、新しいジェネリック変数タイプ()を事前に定義し、VARIANTユーザーの選択に応じて、実行時にその内部タイプを適応させることができます。

ただし、のようなものを使用VARIANTすると、その操作を実行するたびに、その操作が現在の基になるタイプに対して正しいかどうかを確認する必要があるため、コストがかかります。VARIANTまた、ユニオンには独自のオーバーヘッドがあるため、より多くのメモリを使用します(詳細については定義を参照してください)。

使用法を単純化するために、バリアント操作をクラスにラップすることをお勧めします。VARIANT対照的に良い点void*は、型の安全性が大幅に向上し、コードが読みやすくなることです。

編集:別の答えが指摘したように、boos::variantこれはこの目的のためです。

于 2013-03-10T13:00:08.227 に答える
0

boost::variantまたは、POD のみが必要な場合は、をご覧くださいunion。ただし、これは多くのことを複雑にすることに注意してください。

于 2013-03-10T13:01:53.680 に答える
0
enum VariantType {
   USER_INT, USER_DOUBLE
};

union Variant {
   int i;
   double d;
}

int main() {
   VariantType type;
   Variant data;
   type = getUserDataType();
   switch(type) {
   case USER_INT:
      data.i = 42;
      break;
   case USER_DOUBLE:
      data.d = 42.0;
      break;
   default:
      break;
}

...または、準備が整った Variant の実装を使用します。

于 2013-03-10T13:05:33.530 に答える