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