На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> conditional + disjunction + is_same, что тут не так?
    Что здесь не так?

    ExpandedWrap disabled
          using DefaultsType = typename  // 28
            std::conditional<            // 29
              std::disjunction<
                std::is_same<Distribution, std::uniform_int_distribution<T>>::value,
                std::is_same<Distribution, std::uniform_real_distribution<T>>::value
              >::value,                  // 33
              typename Distribution::result_type,
              std::conditional<
                std::is_same<Distribution, std::bernoulli_distribution>::value,
                double,
                void
              >::type                    // 39
            >::type;
    Надо сделать так, что если Distribution — это uniform_int_distribution или uniform_real_distribution, то тип должен быть Distribution::result_type, иначе если bernoulli_distribution, то double, в противном случае void.

    Ошибки:
    ExpandedWrap disabled
      33: error C3544: "_Traits": пакет параметров ожидает аргумент шаблона типа
      114: note: выполняется компиляция ссылки на экземпляр класс шаблон функции "the::Random<T,Generator,Distribution>"
      39: warning C4346: "std::conditional<std::is_same<Distribution,std::bernoulli_distribution>::value,double,void>::type": зависимое имя не является типом.
      39: note: укажите префикс "typename" для задания типа
      29: error C2923: std::conditional: "std::conditional<std::is_same<Distribution,std::bernoulli_distribution>::value,double,void>::type" не является допустимым аргументом типа шаблон для параметра "_Ty2"
      39: note:  см. объявление "std::conditional<std::is_same<Distribution,std::bernoulli_distribution>::value,double,void>::type"
      33: error C2955: "std::disjunction": для использования класс шаблон требуется список аргументов шаблон


    Добавлено
    Всё, вопрос решён :)

    ExpandedWrap disabled
          using DefaultsType = typename
            std::conditional<
              std::disjunction<
                std::is_same<Distribution, std::uniform_int_distribution<T>>,
                std::is_same<Distribution, std::uniform_real_distribution<T>>
              >::value,
              typename Distribution::result_type,
              typename std::conditional<
                std::is_same<Distribution, std::bernoulli_distribution>::value,
                double,
                void
              >::type
            >::type;

    Найдите 10 отличий :P
      Сообщение на автоудалении
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0176 ]   [ 15 queries used ]   [ Generated: 1.08.21, 22:35 GMT ]