gpt4 book ai didi

c++ - 自动将 A* 转换为 B*

转载 作者:行者123 更新时间:2023-11-30 01:31:47 26 4
gpt4 key购买 nike

假设我得到了一个类 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com