2012-03-20 2 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 LONGNAME LN; 

определения типов используются в C++ немного как "переменные, которые могут хранить типы". Пример:

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

    WheelCollection wheels; 
}; 

Используя Car::WheelCollection везде вместо std::vector<Wheel>, вы можете изменить тип контейнера в одном месте и иметь весь код отражают изменения. Это метод C++ для абстрактного типа данных (тогда как, например, в C# у вас есть свойство, возвращающее IEnumerable<Wheel>).

+0

Когда вы разместили это как ответ, а не комментарий, вы должны были показать немного больше любезности, чтобы объяснить, по крайней мере, основы. –

+0

@Rohit: Какие основы? Typedef - это простейший оператор C++, и ничего не знать, кроме как однажды его увидеть. –

+0

Немного теории о том, как его использовать. или что такое typedef, и т. д. будет отличным ответом –

6

Вы можете использовать ключевое слово typedef:

typedef LONGNAME LN; 

Вы также можете сделать что-то вроде:

typedef class { 

... 

} LN; 

Edit: Вы можете столкнуться с проблемами при использовании шаблонов, хотя. См. 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. ИМХО выглядит более последовательным в отношении псевдонимов.

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

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

Кроме того, с using вы можете шаблонных классов (псевдоним How to typedef a template class?) с помощью alias templates.

template<typename T> class LONGNAME {}; 
template<typename T> using LN = LONGNAME<T>; // alias template 
Смежные вопросы