Как tr1:: полезный reference_wrapper?

У меня также были некоторые проблемы с локальными файлами, и это помогло моей ситуации.

Я храню свои статические файлы на S3, но вы можете настроить URL-адрес вашего изображения.

if DEBUG == False:
    STATICFILES_LOCATION = 'static'
    STATIC_URL = "//%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, STATICFILES_LOCATION)
    MEDIAFILES_LOCATION = 'media'
    MEDIA_URL = "//%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, MEDIAFILES_LOCATION)
else:
    MEDIA_URL = '/media/'
    STATIC_URL = '/static/'
19
задан paxos1977 11 October 2008 в 05:36
поделиться

2 ответа

Это похоже на повышение:: касательно, насколько я знаю. В основном, ссылка, которая может быть скопирована. Очень полезный при привязке с функциями, куда необходимо передать параметры ссылкой.

, Например (использующий синтаксис повышения):

void Increment( int& iValue )
{
    iValue++;
}

int iVariable = 0;
boost::function< void () > fIncrementMyVariable = boost::bind( &Increment, boost::ref( iVariable ));

fIncrementMyVariable();

Эта статья доктора Dobbs имеет некоторую информацию

Hope, это правильно, и полезно. :)

16
ответ дан 30 November 2019 в 04:21
поделиться

reference_wrapper - чрезвычайно полезная и простая библиотека. Внутри reference_wrapper хранится указатель на T. Но интерфейс, который он предоставляет, не содержит нотации указателя.

  • Это позволяет ссылке вести себя как другие простые объекты - reference_wrapper может храниться в контейнере STL.
  • Это помогает избежать ужасной нотации указателя - причины столь частой сегментации неисправности. Замените указатель на T на reference_wrapper , указатели на ссылки и T-> f () на Tf () везде, где возможно (конечно, указатели нуждаются в быть сохраненными для удаления объектов, выделенных кучей, но для управления памятью очень полезны контейнеры указателя ускорения).

Пример:

class A
{
    //...
};

class B
{
 public:
   void setA(A& a) 
   {
     a_ = boost::ref(a); // use boost::cref if using/storing const A&
   }
   A& getA()
   {
      return a_;
   }
   B(A& a): a_(a) {}
private:
   boost::reference_wrapper<A> a_; 
};

int main()
{
   A a1;
   B b(a1);
   A a2;
   b.setA(a2);
   return 0;
}

Здесь я использовал ускоренную реализацию ссылочной оболочки, но в стандарте C ++ 0x она тоже будет. См. Также http://aszt.inf.elte.hu/~gsd/halado_cpp/ch11.html#Bind-ref

11
ответ дан 30 November 2019 в 04:21
поделиться
Другие вопросы по тегам:

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