классы и шаблоны сопутствующих типов

Я изучаю C ++ и время от времени сталкиваюсь с чем-то вроде «сопутствующих типов» или каким-то «машинно-зависимым целочисленным типом», который используется в разных случаях, например:

vector<int>::size_type

или же

std::size_t

или в последнее время я читал о типах и объектах ввода-вывода и читал о типе, который «определяется классами ввода-вывода», например:

istream::iostate

это, по-видимому, интегральный тип, используемый какими-то битовыми шаблонами, используемыми для указания состояния объекта потока.

Я знаю, что классы могут включать (помимо функций-членов и членов-данных) члены типа в форме объявлений псевдонимов типов (typedef а также using объявление псевдонима), но для меня это не имеет смысла полностью, должно быть что-то, о чем я еще не читал.
Можете ли вы объяснить, пожалуйста?

большое спасибо!

2

Решение

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

Например, скажем, что стандарт говорит, что должен быть класс Foo это также имеет foo_t, это foo_t требуется, чтобы иметь возможность представлять некоторый диапазон интегральных значений, но это не означает, что они должны быть фиксированного размера (например, std::int32_t). В своей реализации я мог бы просто сказать

class Foo
{
public:
using foo_t = long;
};

Тогда пользователям этого класса не нужно будет знать, что foo_t на самом деле long они не должны зависеть от того, что верно для всех компиляторов (так как другие могут решить реализовать это по-разному). Они просто знают, что foo_t способен хранить некоторый диапазон интегральных значений, основываясь на том, что говорит стандарт C ++.

int main()
{
Foo::foo_t x = 10;
std::cout << x;
}
5

Другие решения


По вопросам рекламы [email protected]