Вы передаете указатель по значению.
Передайте ссылку на указатель, если вы хотите его обновить.
bool clickOnBubble(sf::Vector2i& mousePos, std::vector<Bubble *> bubbles, Bubble *& t)
(Кроме шаблона "наблюдатель"), можно также использовать call_user_func()
или call_user_func_array()
.
, Если Вы передаете array(obj, methodname)
так же первый параметр, он будет вызванный как $obj->methodname()
.
<?php
class Foo {
public function bar($x) {
echo $x;
}
}
function xyz($cb) {
$value = rand(1,100);
call_user_func($cb, $value);
}
$foo = new Foo;
xyz( array($foo, 'bar') );
?>
Что Вы думаете об использовании Наблюдатель шаблон? В противном случае можно реализовать истинный обратный вызов этот путь:
// This function uses a callback function.
function doIt($callback)
{
$data = "this is my data";
$callback($data);
}
// This is a sample callback function for doIt().
function myCallback($data)
{
print 'Data is: ' . $data . "\n";
}
// Call doIt() and pass our sample callback function's name.
doIt('myCallback');
Дисплеи: Данные: это - мои данные
Мне интересно, можно ли использовать магический метод __invoke для создания "как бы" функции первого класса и таким образом реализовать обратный вызов
Звучит что-то вроде этого, для PHP 5.3
interface Callback
{
public function __invoke();
}
class MyCallback implements Callback
{
private function sayHello () { echo "Hello"; }
public function __invoke () { $this->sayHello(); }
}
class MySecondCallback implements Callback
{
private function sayThere () { echo "World"; }
public function __invoke () { $this->sayThere(); }
}
class WhatToPrint
{
protected $callbacks = array();
public function register (Callback $callback)
{
$this->callbacks[] = $callback;
return $this;
}
public function saySomething ()
{
foreach ($this->callbacks as $callback) $callback();
}
}
$first_callback = new MyCallback;
$second_callback = new MySecondCallback;
$wrapper = new WhatToPrint;
$wrapper->register($first_callback)->register($second_callback)->saySomething();
Будет печатать HelloWorld
Надеюсь, это поможет ;)
Но я бы предпочел паттерн Controller с SPL для такой возможности.