您不必弄乱智能指针类的内部结构,因为会ModelPtr->
生成一个CVPatModel*
. 因为你的类CTest
不知道CVPatModel
's 的protected
成员Save()
,你必须声明CTest::SaveModelToFile
一个friend
of CVPatModel
。
#include <memory>
#include <iostream>
template<typename T>
using SP = std::shared_ptr<T>;
class CVPatModel;
typedef SP<CVPatModel> VModel;
class CTest
{
public:
void SaveModelToFile( VModel ModelPtr, const char* szFileName );
};
class CVPatModel
{
public :
friend void CTest::SaveModelToFile( VModel, const char*);
protected :
virtual void Save( const char* szFileName ) { std::cout << "saving to file \"" << szFileName << "\" succeeded!\n"; };
};
void CTest::SaveModelToFile( VModel ModelPtr, const char* szFileName )
{
ModelPtr->Save(szFileName);
}
int main()
{
VModel vm = std::make_shared<CVPatModel>();
CTest ct;
ct.SaveModelToFile(vm, "bla");
}
在Ideone上输出。
如果您开始向 . 添加更多测试功能CTest
,不妨friend class CTest
在CVPatModel
.