Как включить функции C ++ 0x в Visual Studio? [Поддержка списков инициализаторов]

Одна вещь, которая помогает отделиться правильно, избегает "локальных переменных передачи от контроллера для просмотра" антишаблона. Вместо этого:

# app/controllers/foos_controller.rb:
class FoosController < ApplicationController

  def show
    @foo = Foo.find(...)
  end

end

#app/views/foos/show.html.erb:
...
<%= @foo.bar %>
...

Попытка, перемещающая его к методу get, который доступен как вспомогательный метод:

# app/controllers/foos_controller.rb:
class FoosController < ApplicationController

  helper_method :foo

  def show
  end

  protected

  def foo
    @foo ||= Foo.find(...)
  end

end

#app/views/foos/show.html.erb:
...
<%= foo.bar %>
...

Это облегчает изменять то, что вставляется в "@foo" и как он используется. Это увеличивает разделение между контроллером и представлением, не делая их больше сложными.

28
задан templatetypedef 25 February 2011 в 19:12
поделиться

1 ответ

Даже если бы они были там, этот код не работал бы, потому что он присваивает список инициализатора, который еще не является вектором, существующему объекту с именем 'tmp'. Вы можете назначить векторы следующим образом:

vector<int> tmp = vector<int> {...}; // calls constructor, initializes then assigns

или

std::initializer_list<int> iniList = {1,2,3,4,5,6};

, но не

std::vector<int> tmp;
tmp = {...}; // calls assignment operator

. Кстати, эта функция все еще отсутствует в VS2012.

3
ответ дан 28 November 2019 в 03:11
поделиться
Другие вопросы по тегам:

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