C ++ можно передать ссылку на локальный класс в функцию? - PullRequest
4 голосов
/ 18 апреля 2010

Я хотел бы знать, разрешено ли следующее:

template < class C >
void function(C&);

void function() {
  class {} local;
  function(local);
}

спасибо

Ответы [ 2 ]

6 голосов
/ 18 апреля 2010

Это не разрешено прямо сейчас. Но это поддерживается в C ++ 0x. Текущий стандарт говорит в 14.3.1/2

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

Тем не менее, если функция также локальна, проблем нет

void f() {
  class L {} local;
  struct C {
    static void function(L &l) {
      // ...
    }
  };
  C::function(local);
}
0 голосов
/ 18 апреля 2010

Это разрешено, если вы используете полиморфизм вместо шаблонов. Или, если вам не нужно расширять интерфейс, видимый function, подойдет простое наследование.

void function( ABC & );

void function() {
  class special : public ABC {
      virtual void moof() {}
  } local;
  function(local);
}
...