假设我得到了一个类 A
。我想将指向它的指针包装到一个小类 B
中,某种智能指针,具有 B*
自动转换为 A 的约束*
这样我就不需要重写已经使用了 A*
的代码。
因此我想修改 B
以便下面的编译...
struct A {
void foo() {}
};
template <class K>
struct B {
B(K* k) : _k(k) {}
//operator K*() {return _k;}
//K* operator->() {return _k;}
private:
K* _k;
};
void doSomething(A*) {}
void test() {
A a;
A* pointer_to_a (&a);
B<A> b (pointer_to_a);
//b->foo(); // I don't need those two...
//doSomething(b);
B<A>* pointer_to_b (&b);
// Following represents existing code I don't want to change...
pointer_to_b->foo(); // 'foo' : is not a member of 'B<K>'
doSomething(pointer_to_b); // 'doSomething' : cannot convert parameter 1 from 'B<K> *' to 'A *'
}
请注意,B
继承自 A
不是一个选项(A
的实例是在我无法控制的工厂中创建的)...
这可能吗?
谢谢。
最佳答案
pointer_to_b 的类型是指向B 的指针,这是一个你不能修改的类型;它由编译器实现。
您可以执行 (*pointer_to_b)->foo(),这将做正确的事情(假设您有重写的运算符->())。但是,如果您将 pointer_to_be 传递给它,那不会让其他代码做正确的事情。
另外让我补充一点,您可以覆盖 B 上的 operator& 以返回 A*,这可能会解决您的问题,具体取决于具体用例。
关于c++ - 自动将 A* 转换为 B*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2715340/