Предположим, мне дали класс 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
создаются на фабриках вне моего контроля) ...
Возможно ли это?
Спасибо.