我正在用C ++编写一个API,我想限制程序员用指向API创建的对象的指针。
例如,
// API
class object {
// details unimportant
};
// Programmer's code
object o; // OK
object *op = &o; // OK
long *lp = (long *)op; // No
object o2 = op[100]; // No
据我所知,鉴于C ++的类型系统,其中一些可能很难或不可能。有没有办法来实施这种类型的使用模式?有没有办法限制给定指针类型的可用操作?重载object
的{{1}}是否有用?
operator&
答案 0 :(得分:2)
C ++中没有办法阻止C风格的指针转换。任何(非函数)指针都可以是C样式转换为任何其他指针类型。
给定一个指针,没有办法告诉编译器“这绝对不是一个数组。”所以你也无法阻止op[100]
。
你可以做的是隐藏班级本身的所有成员,例如使用Pimpl习语或C风格的不透明结构/类。但这对于限制用户获取指向实例的指针并投射它们的能力无济于事。
C ++是一种同意成年人的语言。如果您不同意,请使用其他语言。