Я сделал тестовый пример, чтобы показать проблемы, с которыми я сталкиваюсь. Пожалуйста, прости меня за мое невежество по вопросам отложенных библиотек и приведения указателей. Единственная библиотека, включенная в deferred.lib.
#include <deferred/deferred.h>
using namespace deferred;
SafePtr<Deferred> recordTime(int time)
{
SafePtr<Deferred> d = createDeferred();
SafePtr<CallbackData> p = new PointerCBD< char>( 0 );
d->execute(p);
return d;
}
int main(int argc, char* argv[])
{
while(1)
{
SafePtr<Deferred> d = recordTime(1000);
d->waitHereForCompletion();
char* c = dynamic_pointer_cast<char>(d->endResult());
}
return 0;
}
Когда я пытаюсь скомпилировать в Windows XP с VS2008, я получаю:
Ошибка C2440: «инициализация»: невозможно преобразовать из
'deferred: SafePtr' в 'char *' с
[Т = символ]
Нет оператора пользовательского преобразования, который мог бы выполнить это
преобразование или оператор не может быть вызван.
Я пробовал эту команду, чтобы вернуть указатель, а не SafePtr:
ManagerTimings* t = dynamic_pointer_cast<ManagerTimings>(d->endResult()).get();
Тогда я получаю эту ошибку:
Ошибка C2664: 'deferred :: intrusive_ptr_release': невозможно преобразовать
параметр 1 от 'char *' до
'deferred: ReferenceCountable *'
Я пробовал эту команду:
ManagerTimings* t = dynamic_pointer_cast<ManagerTimings>(d->endResult().get());
Тогда я получаю эту ошибку:
Ошибка C2784: 'deferred :: SafePtr deferred :: dynamic_pointer_cast (const deferred :: SafePtr &)': не удалось вывести аргумент шаблона для 'const deferred :: SafePtr &' from 'deferred :: CallbackData * '