【发布时间】:2016-09-25 19:57:10
【问题描述】:
我正在尝试实现一个通用指针类,它包含一个原始指针或shared_ptr。我有一个枚举来指示指针对象包含什么。
enum class memory_management_t{
raw_pointer,
counted_pointer,
};
指针类是一个模板类:
template<class T, memory_management_t MEM>
class pointer;
这会重载 -> 和 * 运算符。
现在我的问题是一个类的虚成员函数是否想像这样使用指针类:
void func(pointer<std::string> s);
由于 func 可以是虚拟的,所以这是不可能的:
template<memory_management_t MEM>
void func(pointer<std::string, MEM> s);
如果我可以传递指向函数的指针而不重载这些函数,那就太好了,如果它们是 pointer<T, memory_management_t::raw_pointer> 或 pointer<T,memory_management_t::counted_pointer> 就不行了
我怎样才能达到这种效率?
【问题讨论】:
-
“这一切仅用于教育目的,所以请不要建议我改变我的设计或说这样做在 c++ 中是个坏主意。”你期待吗??
-
看看CRTP,可能会从这个方向提供解决方案。
-
@πάνταῥεῖ 对不起,我只是不想要“根本不这样做”这样的答案,因为如果有帮助,我会改变我的设计
标签: c++ templates pointers c++11 smart-pointers