C ++ определяет тип с допустимыми значениями

Взгляните на это http://benalman.com/code/projects/jquery-resize/examples/resize/

Он имеет различные примеры. Попробуйте изменить размер окна и посмотреть, как отрегулированы элементы внутри элементов контейнера.

Пример с js скриптом, чтобы объяснить, как заставить его работать. Взгляните на эту скрипту http://jsfiddle.net/sgsqJ/4/

В том, что событие resize () связано с элементами, имеющими класс «test», а также к объекту window и изменению размера объекта окна $ ('. test'). Вызывается resize ().

, например

$('#test_div').bind('resize', function(){
            console.log('resized');
});

$(window).resize(function(){
   $('#test_div').resize();
});

3
задан fmiz 18 March 2019 в 14:48
поделиться

2 ответа

Проблема с вашим решением состоит в том, что stopBits<1> и stopBits<2> - это разные типы, что затрудняет выбор во время выполнения, какой из них вы хотите использовать.

Вы можете сделать то же самое с не шаблонным классом с закрытым конструктором и шаблоном друга или статической функции make, который возвращает объект класса. Примерно так (предупреждение, непроверенный код):

class baudRate { 
   private:
     baudRate(int bps) : bps(bps) {}   
   public:
     template <int bps_> static constexpr baudRate make() {
       static_assert(whatever);
       return baudRate(bps_);
     }
   const int bps;
};

auto r = slow ? baudRate::make<9600>() : baudRate::make<115200>();

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

0
ответ дан n.m. 18 March 2019 в 14:48
поделиться

Вы можете выполнять проверки во время выполнения или во время компиляции, но не одновременно.

Если у вас есть проверки во время компиляции, вы вынуждены каким-то образом жестко кодировать значения. Это домен constexpr и static_assert. Это несколько ваше первое решение.

Если вы хотите передать значение в конструктор, вы теряете проверку времени компиляции, поскольку теперь вы присваиваете значения, а компилятор не знает, какое значение может быть передано в конструктор. Вы можете использовать такие вещи, как bounded :: integer или свернуть свои собственные, которые проверяют значение во время выполнения и ведут себя соответственно. (например, runtime_error)

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

0
ответ дан rioki 18 March 2019 в 14:48
поделиться
Другие вопросы по тегам:

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