Как передать ссылку на функцию в аргумент - PullRequest
1 голос
/ 01 июня 2010

Я использую boost :: function для создания ссылок на функции:

typedef boost::function<void (SomeClass &handle)> Ref;
someFunc(Ref &pointer) {/*...*/}

void Foo(SomeClass &handle) {/*...*/}

Как лучше всего передать Foo в someFunc ? Я пробовал что-то вроде:

someFunc(Ref(Foo));

1 Ответ

5 голосов
/ 01 июня 2010

Чтобы передать временный объект в функцию, он должен принимать аргумент либо по значению, либо по постоянной ссылке. Непостоянные ссылки на временные объекты не допускаются. Таким образом, любое из следующих должно работать:

void someFunc(const Ref&);
someFunc(Ref(Foo)); // OK, constant reference to temporary

void someFunc(Ref);
someFunc(Ref(Foo)); // OK, copy of temporary

void someFunc(Ref&);
someFunc(Ref(Foo)); // Invalid, non-constant reference to temporary
Ref ref(Foo);
someFunc(ref); // OK, non-constant reference to named object

Кстати, вызов типа Ref и экземпляра pointer, когда он не является ни ссылкой, ни указателем, может быть немного запутанным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...