Урожай в поле зрения для нескольких блоков

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

template <typename T> 
class Foo {
  std::enable_if_t<sizeof(T)==4, void> f(T& t) 
  { std::cout << 1 << t; }
  void f(T volatile& t) 
  { std::cout << 2 << const_cast<T&>(t); }

  void bar() { T t; f(t); }
};

Это законно; обе перегрузки являются потенциально вызываемыми и делают почти то же. Бросок в volatile перегрузка законна, поскольку мы знаем, что панель не передаст энергонезависимое T так или иначе. volatile версия строго хуже, тем не менее, поэтому никогда не выбираемая в разрешении перегрузки, если энергонезависимое f доступно.

Примечание, что код никогда на самом деле зависит от volatile доступ к памяти.

5
задан Mark Embling 5 December 2009 в 09:58
поделиться

1 ответ

Недавно я столкнулся с этой проблемой на Railscamp, и, к счастью, Тим Лукас смог указать мне на то, что он разветвлял и над которым работал, под названием sinatra-content-for . Это покроет все, что вам нужно.

4
ответ дан 14 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

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