boost :: shared_ptr에 저장된 기본 유형과 포인터 유형을 모두 사용하는 C++ 템플릿 라이브러리를 개발 중입니다. 라이브러리의 하위 레이어로 전달되기 전에 필요한 경우 기본 유형을 컨테이너 클래스에 압축하는 데 사용되는 도우미 클래스에 문제가 있습니다. 다음은 포인터를 전달하는 기본 유형과 기본 요소 중 하나 인 std :: string에 대한 구현을 보여줍니다.boost :: shared_ptr을 템플릿 매개 변수에서 제거하십시오.
template <class T> class RRPrimUtil
{
public:
static rr_DataType GetTypeID() {return rr_void_t;}
static boost::shared_ptr<RRObject> PrePack(T val) {return rr_cast<RRObject>(val);}
static T PreUnpack(boost::shared_ptr<RRObject> val) {return rr_cast<T>(val);}
};
template<> class RRPrimUtil<std::string>
{
public:
static rr_DataType GetTypeID() {return rr_string_t;}
static boost::shared_ptr<RRObject> PrePack(std::string val) {return rr_cast<RRObject>(stringToRRArray(val));}
static std::string PreUnpack(boost::shared_ptr<RRObject> val) {return RRArrayToString(rr_cast<RRArray<char>>(val));}
};
rr_cast <는>() 함수 dynamic_pointer_cast 별칭이다. 내가 겪고있는 문제는 일반적인 경우에 템플릿 "T"에 "boost :: shared_ptr"접두사가 있기 때문입니다.이 유형은 shared_ptr과 상호 작용할 수도 있고 사용하지 않을 수도 있기 때문입니다. 접두사는 단지 포인터 유형을 기대하기 때문에 dynamic_pointer_cast를 엉망으로 만든다. 이 문제를 해결할 수있는 확실한 방법이 있습니까?
감사합니다. 문제가 해결되었습니다. – John