2012-03-20 24 views
11

名前空間でのクラス名のエイリアスはできますか?例えば名前空間でのクラス名のエイリアスはできますか?

namespace longname{ } 
namespace ln = longname;// namespace aliasing 

class LONGNAME {}; 
class LN = LONGNAME; // how to do class name aliasing, if allowed? 
+5

私が誤解していない限り、typedefはそれを行うべきですか? –

答えて

21

シンプル:のtypedefは "タイプを格納することができる変数" のようなビットC++で使用される

typedef LONGNAME LN; 

。例:どこでも代わりのstd::vector<Wheel>Car::WheelCollectionを使用することにより

class Car 
{ 
public: 
    typedef std::vector<Wheel> WheelCollection; 

    WheelCollection wheels; 
}; 

、あなたは一つの場所にコンテナタイプを変更し、すべてのコードは、変更を反映することができます。これはデータ型を抽象化するC++の方法です(たとえばC#では、IEnumerable<Wheel>を返すプロパティがあります)。

+0

答えを投稿してコメントを投稿していないときは、少なくとも基本を説明するために少し礼儀を示していたはずです。 –

+0

@Rohit:基本は何ですか? typedefはC++のもっとも単純な文であり、一度だけ見たこと以外は知るところがありません。 –

+0

使い方に関する少しの理論。またはtypedefとは何かなどは素晴らしい回答でしょう –

6

あなたはtypedefキーワードを使用することができます

typedef class { 

... 

} LN; 

編集: しかし、テンプレートを使用するときは、問題に遭遇する場合があります。また、のような何かを行うことができます

typedef LONGNAME LN; 

を。可能な解決策については、hereを参照してください。

+1

提供されたリンクは、テンプレートではなく、クラスではなく、全く異なる獣です。 –

+0

@DavidRodríguez-dribeas私は、OPが 'typedef'テンプレートクラスで面白いかもしれないと考えました。 – ApprenticeHacker

1
typedef int mark; // for in built data types 

class abc 
{ 
}; 

typedef abc XYZ; // for user written classes. 

Typedefを使用すると、シナリオに対応したよりコンテキスト依存の名前でクラスまたはデータ型の別名を付けることができます。

6

キーワードtypedefで既に提供されている回答のほかに、usingというキーワードをC++ 11以降使用することもできます。 IMHOエイリアシングに関して一貫して見えます。また

namespace longname{ } 
namespace ln = longname;// namespace aliasing 

class LONGNAME {}; 
using LN = LONGNAME; // "class aliasing" 

、あなたがalias templatesを使用して、エイリアステンプレートクラス(How to typedef a template class?)することができますusingと。

template<typename T> class LONGNAME {}; 
template<typename T> using LN = LONGNAME<T>; // alias template 
関連する問題