2012-01-15 4 views
20

Я пытаюсь запустить свою программу без использования boost, но не могу найти альтернативы некоторым полезным шаблонам. А именно, я не могу найти boost::optional -likewise шаблон в стандартной библиотеке. Есть ли какая-то стандартная альтернатива для boost::optional (C++ 11 или где-то еще)?boost :: дополнительная альтернатива в стандартной библиотеке C++

+0

C++ 0x == C++ 11, удалено из вопроса. :) – Xeo

+1

Вы можете использовать указатель с нулевым значением как дешевую и небезопасную альтернативу 'boost :: optional'. Или, может быть, 'std :: unique_ptr', где значение 0 (null_ptr, NULL) интерпретируется как неинициализированный необязательный тип. Помимо недостатков, хорошо, что вам не нужно ничего внедрять; но просто держите абстракцию в виду. Об этом говорится в руководстве по ускорению http://www.boost.org/doc/libs/1_53_0/libs/optional/doc/html/boost_optional/development.html#boost_optional.development.the_interface. В результате , вы могли бы заменить необязательный T * в некоторых ситуациях, но не всегда " – alfC

ответ

26

Короткий ответ: Нет

Длинный ответ: Ролл свой собственный согласно повышающего спецификации. Документация достаточно полная, и код не такой сложный, но для этого все еще требуются навыки среднего уровня C++.

Чтобы уточнить этот ответ, C++ 14, к сожалению, не отправил std::optional. Текущее предложение (редакция 5) - N3793, и ожидается, что оно будет отправлено в виде отдельной технической спецификации или станет частью C++ 17.

+12

В некоторых средах, к сожалению, политически невозможно использовать boost. –

+3

Вы задумывались над [извлечением только факультативного из boost] (http://www.boost.org/doc/libs/1_53_0/tools/bcp/doc/html/index.html)? – Nova

+3

Зачем пытаться избавиться от зависимостей boost? О, позвольте мне подсчитать причины ... – einpoklum

12

В настоящее время существует a proposal for C++14 (или C++ 17). Так что ответ (возможно) еще не :).

+4

По-видимому, он только что был отклонен C++ 14 в Технический Спецификация (см. Http://en.cppreference.com/w/cpp/utility/optional) :( – Nova

+1

Не так ли, что «голосование» в комитете C++ говорит, что на самом деле означает «голосование за»? –

2

Как pmr explained, это невозможно прямо сейчас, и не будет, пока C++ 17 не будет.

Однако вы должны иметь возможность использовать этот single header library на github в качестве замены при замене форсированного или std дополнительного. Он не имеет зависимостей (кроме компилятора C++ 11/C++ 14).

 Смежные вопросы

  • Нет связанных вопросов^_^