ModelPtr->
が生成されるため、スマート ポインター クラスの内部をいじる必要はありませんCVPatModel*
。あなたのクラスはのメンバーをCTest
知らないので、 ofを宣言する必要があります。CVPatModel
protected
Save()
CTest::SaveModelToFile
friend
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
.