как использовать переменные внутри функции делегата - PullRequest
0 голосов
/ 28 мая 2009

Я использую SDK для USB-камеры. SDK указывает, что для каждого захваченного кадра будет вызываться функция обратного вызова. Функция обратного вызова определена внутри SDK, она получает указатель данных на изображение и структуру, используемую для интерпретации данных.

Все это работает правильно.

Чтобы сделать из этого полезное приложение, мне нужно получить доступ к нескольким переменным из моего приложения. Теперь, поскольку функция делегата является статической, я могу получить доступ только к статическим членам. Я думал о том, чтобы сделать из них синглтон, потому что он будет статичным, но есть ли какой-нибудь «традиционный» способ доступа к другим данным внутри функции делегата?

Ответы [ 3 ]

1 голос
/ 28 мая 2009

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

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

Если нет, то вам могут потребоваться статические данные или статическая ссылка на класс, содержащий ваши данные. В этом случае лучшим вариантом может быть синглтон или аналогичная конструкция ...

0 голосов
/ 28 мая 2009

Делегат может быть статичным (хотя зачем это нужно, мне непонятно). Функция не должна быть.

Разыменование делегата в вызове метода не имеет значения, является ли вызываемая функция методом экземпляра или статическим.

0 голосов
/ 28 мая 2009

Почему вы сделали делегата статичным? Если тебе больно, когда ты это делаешь, прекрати это делать. :)

...