假設我有一個類A
。我想將它指向一個小類B
,這是一種智能指針,約束條件是B*
自動轉換爲A*
,這樣我就不需要重寫已經使用了A*
的代碼。自動將A *轉換爲B *
因此,我要要修改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
實例在工廠創造出我的控制)。 ..
這可能嗎?
謝謝。
你有沒有考慮現有的智能指針實現,如'auto_ptr'或'shared_ptr'? – Amber 2010-04-26 17:10:20
轉換爲'A *'不是我想從'B'中唯一承擔的責任:它必須特別從其他類繼承。而且我將不得不使用'A *'來改變代碼,是嗎? – 2010-04-26 17:17:45
那麼,您的運營商爲什麼註釋掉? – AnT 2010-04-26 17:18:40