C ++无法从deferred :: SafePtr <t>转换为T * </t>

时间:2011-08-11 16:37:08

标签: c++ casting

我做了一个测试用例来展示我遇到的问题。请原谅我对延迟库和指针转换问题的无知。 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 *'

2 个答案:

答案 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。