Использование псевдонимов для строгого набора параметров функцииC++

Программы на C++. Форум разработчиков
Anonymous
Использование псевдонимов для строгого набора параметров функции

Сообщение Anonymous »

Можно использовать псевдоним, чтобы изменить буквальную подпись функции: < /p>

using String = std::string;

void Print(String s) { ... };
< /code>

Но это не запрещает вызову print < /code> с помощью std :: string < /code>: < /p>

Print(std::string{"Hello world"}); // Still works
< /code>

Это имеет смысл - псевдоним строго для упрощения имени для типа, он не определяет новый тип. Непосредственное следствие этого заключается в том, что это также было бы возможно: < /p>

using StringA = std::string;
using StringB = std::string;

void Print(StringA s) { ... };
void Print(StringB s) { ... };

Print(StringA{"Hello world"});
Print(StringB{"Hi everyone"});
< /code>

Мое текущее решение состоит в том, чтобы определить простые классы обертки, которые удерживают тип, который я хочу, чтобы псевдоним в качестве члена. Это не идеально, потому что это требует дублирования интерфейса для класса участника в обертку, что не нужно при использовании псевдонима.


Подробнее здесь: https://stackoverflow.com/questions/329 ... parameters

Вернуться в «C++»