Создание нового типа примитива

std::string::iterator end_pos = std::remove(str.begin(), str.end(), ' ');
str.erase(end_pos, str.end());
5
задан Fire Lancer 15 October 2009 в 14:51
поделиться

3 ответа

Я слышал слух, что C ++ 0x принесет сильные определения типов, которые позволят классу utf8 в вашем случае отличаться от char, но этого в настоящее время не существует. Может быть, Boost strong typedef поможет, но я не знаю.

4
ответ дан 13 December 2019 в 05:37
поделиться

Автор C ++ Мэтью Уилсон называет то, что вы описываете, «истинными определениями типов». Они реализованы как класс, содержащий один член данных (как вы и сказали). Он описывает их и предоставляет реализацию шаблона в главе 18 из Imperfect C ++ (хорошая книга, кстати) и в этой статье в Dr. Dobb's Journal .

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

8
ответ дан 13 December 2019 в 05:37
поделиться

Проблема в том, что typedef на самом деле не определяет новые типы (например, Ада, где вы можете определять взаимно несовместимые целочисленные типы), а только псевдонимы для существующих.

Я считаю, что один предложений по следующей версии C ++ будет включать соответствующие типы.

0
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: