Можем ли мы назвать имя класса так, как мы это делаем в пространствах имен?
Например:
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 LONGNAME LN;
Typedefs используются в С++ как "переменные, которые могут хранить типы". Пример:
class Car
{
public:
typedef std::vector<Wheel> WheelCollection;
WheelCollection wheels;
};
Используя Car::WheelCollection
всюду, а не std::vector<Wheel>
, вы можете изменить тип контейнера в одном месте и изменить весь код на изменения. Это метод С++ для абстрактного типа данных (тогда как, например, в С# у вас есть свойство, возвращающее IEnumerable<Wheel>
).
Вы можете использовать typedef ключевое слово:
typedef LONGNAME LN;
Вы также можете сделать что-то вроде:
typedef class {
...
} LN;
Edit: Однако при использовании шаблонов могут возникнуть проблемы. См. здесь для возможного решения.
Помимо ответов, уже предоставленных с помощью ключевого слова typedef
, вы также можете использовать ключевое слово using
с С++ 11. IMHO выглядит более последовательным в отношении псевдонимов.
namespace longname{ }
namespace ln = longname;// namespace aliasing
class LONGNAME {};
using LN = LONGNAME; // "class aliasing"
Кроме того, с using
вы можете использовать классы шаблонов alias (Как typedef класс шаблона?) с помощью шаблоны псевдонимов.
template<typename T> class LONGNAME {};
template<typename T> using LN = LONGNAME<T>; // alias template
typedef int mark; // for in built data types
class abc
{
};
typedef abc XYZ; // for user written classes.
Typedef позволяет вам присваивать имя класса или типа данных с более контекстно-зависимым именем, соответствующим сценарию.