Я просто побежал вдоль C++ требует ключевого слова и вы хотите знать, правильно ли я понимаю, до сих пор: Оба требует и enable_if предложение компиляции временных ограничений для шаблонов. Если требует ограничения будут включены вообще.C++ ограничения enable_if против требует
Где требует предлагает способ ограничения функциональных параметров, enable_if имеет основную цель ограничения времени компиляции перевода в определенных условиях самого типа шаблона.
Примеры:
#include <type_traits>
template<typename T>
concept T AdditiveGroup
{
return requires(const T pA, const T pB)
{
{ pA + pB }->T;
};
};
template<typename T>
typename std::enable_if<std::is_integral<T>::value, bool>::type
addElements(const T pA, const T pB)
{
return (pA + pB);
}
Здесь понятие должно работать тогда и только тогда, когда Ра и Рb могут быть добавлены, в то время как условие enable_if ограничивает оценку интегральных типов.
Спасибо, что сообщили мне, если я прав!
P.S .: Я еще не совсем уверен в синтаксисе , требующих ограничений, которые, как представляется, различаются. Кроме того, не знаю, какой компилятор их принимает в данный момент, поэтому спасибо за любые подсказки!
Синтаксис 'require' происходит от Concepts Lite, который еще не завершен. – kennytm
Я решил, что он все еще находится в разработке. Предполагая, что это будет рассмотрено для будущего стандарта, я хотел знать, правильно ли я понял эти идеи. Тем временем я нашел эту полезную статью, которая показывает, что оба подхода в основном основаны на шаблонах: http://accu.org/index.php/journals/2198 – gilgamash
Для примеров/деталей вы можете взглянуть на [N4377 - Языки программирования - Расширения C++ для концепций] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf). К сожалению [понятия не делали C++ 17] (http://honermann.net/blog/2016/03/06/why-concepts-didnt-make-cxx17/), но GCC v6 поддерживает их (через '-fconcepts 'переключатель). – manlio