名前空間でのクラス名のエイリアスはできますか?例えば名前空間でのクラス名のエイリアスはできますか?
:
namespace longname{ }
namespace ln = longname;// namespace aliasing
class LONGNAME {};
class LN = LONGNAME; // how to do class name aliasing, if allowed?
名前空間でのクラス名のエイリアスはできますか?例えば名前空間でのクラス名のエイリアスはできますか?
:
namespace longname{ }
namespace ln = longname;// namespace aliasing
class LONGNAME {};
class LN = LONGNAME; // how to do class name aliasing, if allowed?
シンプル:のtypedefは "タイプを格納することができる変数" のようなビットC++で使用される
typedef LONGNAME LN;
。例:どこでも代わりのstd::vector<Wheel>
Car::WheelCollection
を使用することにより
class Car
{
public:
typedef std::vector<Wheel> WheelCollection;
WheelCollection wheels;
};
、あなたは一つの場所にコンテナタイプを変更し、すべてのコードは、変更を反映することができます。これはデータ型を抽象化するC++の方法です(たとえばC#では、IEnumerable<Wheel>
を返すプロパティがあります)。
答えを投稿してコメントを投稿していないときは、少なくとも基本を説明するために少し礼儀を示していたはずです。 –
@Rohit:基本は何ですか? typedefはC++のもっとも単純な文であり、一度だけ見たこと以外は知るところがありません。 –
使い方に関する少しの理論。またはtypedefとは何かなどは素晴らしい回答でしょう –
あなたはtypedefキーワードを使用することができます
typedef class {
...
} LN;
編集: しかし、テンプレートを使用するときは、問題に遭遇する場合があります。また、のような何かを行うことができます
typedef LONGNAME LN;
を。可能な解決策については、hereを参照してください。
提供されたリンクは、テンプレートではなく、クラスではなく、全く異なる獣です。 –
@DavidRodríguez-dribeas私は、OPが 'typedef'テンプレートクラスで面白いかもしれないと考えました。 – ApprenticeHacker
typedef int mark; // for in built data types
class abc
{
};
typedef abc XYZ; // for user written classes.
Typedefを使用すると、シナリオに対応したよりコンテキスト依存の名前でクラスまたはデータ型の別名を付けることができます。
キーワード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
私が誤解していない限り、typedefはそれを行うべきですか? –