c – 不能dynamic_cast void *到模板化的类
作者:互联网
我得到的确切错误是:
不能dynamic_cast’对象'(类型为’void *’)来键入’class udDator(int)*’
(source不是指向类的指针)
这发生在重写的运算符delete中.我正在尝试创建一个模板化的内存管理类,它可以继承到任何其他类,通过引用管理内存.这将取代类似智能shared_ptr的东西,试图使内存管理更加不可见,并且没有额外的输入(shared_ptr< someClass> shared(new someClass())有点长……).
无论如何,这是相关的代码.如果我忘记提及任何细节,或者没有您需要查看的代码,请告诉我.
被覆盖的操作符:
template< class T >
class udSharedMemory
{
public:
void operator delete( void *object )
{
T *temp = dynamic_cast< T* >( object ); //<------ ERROR!
assert( temp && "Something went wrong during casting" );
temp->release();
}
}
模板类:
template< class T >
class udDator : public udMemoryManaged, public udSharedMemory< udDator< T > >
{
// stuff
};
模板类的用法:
udDator< int > *test = new udDator< int >( "5" );
解决方法:
动态强制转换需要多态行为,而void则没有.请改用static_cast.
标签:dynamic-cast,c,templates 来源: https://codeday.me/bug/20191007/1865822.html