-1

I just learned about typedef. Suppose I have an instance:

private:
  typedef std::string int doubles abc;

when I make an accessors to instance abc:

returnType get(){...}

what should I put in the returnType? is it abc or the data type? thx

4

1 に答える 1

2

ここで何をしたいのかわかりません。あなたtypedefは無効な構文であり、「doubles」はC ++タイプではありません(ただし、おそらくタイプミスです)。有効な構文の例は次のとおりです。

typedef std::string abc;
typedef int foo; 
...

typedefその後、他のタイプと同じように、関数内シグネチャを使用できます。

abc getValue();

ただし、パブリックメンバー関数で使用する場合は、クラスtypedefの一部にを配置する必要があります。また、クラス外のコードは、再度'dされない限り、常にクラスの名前のpublicプレフィックスを付ける必要があることに注意してください。typedeftypedef

class SomeClass {
public:
    typedef std::string foo;
};

// Somewhere outside SomeClass
SomeClass::foo bar = ...
typedef SomeClass::foo localFoo;
localFoo fooBar = ...;

それとは別にtypedef、変数に複数の型を表す方法はありません。C ++は静的に型付けされた言語であるため、これを直接行うことはできません。ただし、次のことができます。

  • 共通のインターフェースを持つポリモーフィッククラスを使用すると、派生クラスのインスタンスを基本クラスのインスタンスのように扱うことができますが、異なることを行います
  • といくつかの識別子を使用してunion、現在保存しているタイプを保存します
  • 使用void*とキャスト-お勧めしません!
  • 他の人が提案したようboost::variantなものを使用するboost::any

編集:最後に、「インスタンス」という用語の使用について:これは通常、クラスのインスタンス、つまりクラスに属する特定のオブジェクトを指すために使用されます。つまり、「メンバー変数」です。

于 2013-01-19T21:16:55.930 に答える