2016-07-04 3 views
0

Недавно я прочитал, как классы могут определять свои собственные локальные имена для типов. Одним из известных примеров является size_type, предоставляемый практически всеми STL-контейнерами. Также было упомянуто, что это помогает скрыть детали реализации от пользователя класса. Я не совсем уверен, как это происходит.C++ - Значение локальных имен для типов

Каковы некоторые примеры, когда определение локальных имен типов может быть полезным и как это скрывает детали реализации?

+1

Какие детали реализации вы видите как открытые через имя «size_type»? – molbdnilo

+1

@molbdnilo и какие из них скрыты? – juanchopanza

ответ

1

Просьба привести некоторые примеры, когда определение локальных имен для типов может быть полезным и как оно скрывает детали реализации.

его более полезно при использовании шаблонных алгоритмов или контейнеров, которые могут предполагать, что ваш тип имеет такой псевдоним типа. Поэтому даже если вы измените тип для size_type - то есть измените по какой-либо причине с size_t на int, тогда ваш тип по-прежнему будет работать с этими алгоритмами/контейнерами.

В противном случае наличие стандарта size_type требуется по стандарту, если вы, например, реализуете свой собственный распределитель.

1

Предположим, у вас есть программа, в которой вы определяете несколько переменных типа size_type и что она определена где-то как int.

Затем, при анализе и отражении, вы понимаете, что переменные никогда не принимают значения, превышающие 10 тысяч. Таким образом, 32 бита, используемые для выделения каждой из этих переменных, являются немногочисленными. В этом случае вы можете переопределить size_type как short, а не int. Поэтому вы сохраните некоторую память.

Что касается примеров, вы можете проверить clock_t, char16_t, char32_t, wchar_t, true_type и false_type.