从模板参数中去除提升::shared_ptr
Strip boost::shared_ptr from a template parameter
我正在开发一个C++模板库,它使用存储在 boost::shared_ptr 中的基元类型和指针类型。 我遇到了一个帮助程序类的问题,该类用于在必要时将基元类型打包到容器类中,然后再传递到库的较低层。 下面显示了仅传递指针的基本类型,以及作为基元之一的 std::string 的实现。
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,因为它只需要指针类型。 有没有一种干净的方法来解决这个问题?
模板元函数将为您剥离它:
template<typename T> struct primitive_type
{
typename T type;
};
template<typename T> struct primitive_type< boost::shared_ptr< T > >
{
typename T* type;
};
如果传递给它的类型是形式boost::shared_ptr< T >
它将返回T*
;否则它将返回它实例化时使用的类型。
相关文章:
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- C++中的指针否定 (!ptr == NULL)
- 从const ptr*转换为ptr*时出现问题
- 无法使用 libtool 将 -shared 参数传递给 g++
- boost::shared_ptr和std::shared-ptr的同居
- 我可以用std::shared_ptr而不是boost::shared-ptr构建boost库吗
- shared-ptr-C++shared_ptr与unique_ptr用于资源管理