使用&如果变量类型已超载获取变量的地址可能会有问题operator&().例如,_com_ptr_已经operator&()重载,具有修改对象的副作用.
现在我有一组复杂的模板,其功能如下:
template<class T>
void process( const T* object )
{
//whatever
}
template<class T>
void tryProcess( T& object )
{
process( &object )
}
Run Code Online (Sandbox Code Playgroud)
在tryProcess()我需要得到一个T*字保存类型的实际对象的地址T.
tryProcess()如果class T没有operator&()重载,上面的实现只会正常工作.所以,如果我打电话,tryProcess<_com_ptr_<Interface>>()我可以得到意想不到的结果 - 重载operator&()被触发.
template<class T>
T* getAddress( T& object )
{
return reinterpret_cast<T*>( &reinterpret_cast<char&>( object ) );
}
Run Code Online (Sandbox Code Playgroud)
有了这样的功能,我可以实现tryProcess()如下:
template<class T>
void tryProcess( …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个关于如何在C中将文件从一个目录复制到另一个目录的简单示例.该程序应该只使用C本机的跨平台函数.