我做了一个测试用例来展示我遇到的问题。请原谅我对延迟库和指针转换问题的无知。 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;
}
当我尝试使用VS2008在Windows XP中编译时,我得到:
错误C2440:'初始化':无法转换 '延迟:SafePtr'到'char *' [T =炭]
没有可以执行此操作的用户定义转换运算符 转换,或者无法调用运算符。
我试过这个命令来返回一个指针,而不是一个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&lt; U&gt;&amp;)':无法推断'const deferred :: SafePtr&lt;的模板参数U> &安培;”来自'deferred :: CallbackData *'
答案 0 :(得分:0)
试试这个:
ManagerTimings* t = dynamic_pointer_cast<ManagerTimings>(d->endResult().get());
如果你想获得一个“不安全”的指针,或者可能是这样:
SafePtr<ManagerTimings> t= dynamic_pointer_cast<ManagerTimings>(d->endResult());
获取安全的ManagerTimings
指针。我不知道您使用的是哪个库,但我怀疑dynamic_pointer_cast
可以将SafePtr
转换为另一个SafePtr
。或者只是转换指针。
答案 1 :(得分:-1)
&*d->endResult()
我认为从这段代码开始,endResult是你遇到麻烦的SafePtr。