推 duozero:確實是這樣沒錯,看來我搞混proxy的用法了Orz 06/12 14:40
※ 引述《duozero (豬喔)》之銘言:
: 希望得到的正確結果:
: 能在增加代理類別的情況下
: 正常使用(.)連續呼叫函數
: 程式跑出來的錯誤結果:
: main.cpp(11) : error C2027: 使用未定義型別 'test'
: proxy.h(1) : 請參閱 'test' 的宣告
: 這部分有點不懂
: proxy.h 內的 test *ptr 這邊
: 只要有使用前置類別宣告 class test;
: 就可以正確捕捉到 test 這個型別
: 但test &setTime(int,int,int) 卻不能
: 一定得#include"test"才可以
: 但使用#include"test"好像就失去了使用代理類別的目的了
: proxy.h的部分
: class test;
: class proxy
: {
: public:
: proxy(int);
: ~proxy();
: test &setTime(int,int,int); //ERROR
: int getTime()const;
: private:
: test *ptr;
: };
你想要達成的效果是所有對 test 的操作得全部透過 proxy
那麼你就不應該回傳一個 test 的實體(或者如這裡是 ref)回去給呼叫 proxy 的人
這樣子外面 (在你這裡是 main) 就非得知道 test 是什麼不可了
我會改成這個樣子:
class proxy
{
//略
proxy& setTime(int,int,int);
};
proxy& proxy::setTime(int h, int m, int s)
{
ptr->setTime(h,m,s);
return *this;
}
反正你之後也是要操作 test 也得經過 proxy 那就回傳 proxy 回去就行了
---
不過如果是指標的話又不一樣了
指標只不過是個指向某處的值
所以在不讓人知道指向的東西是什麼的情況下
是可以把這指標做為所謂的 handle 給丟出去給外面
這樣外面只會知道要做事時要把 handle 也傳進去
但他不會知道 handle 後面是什麼
(話說回來
這種 handle 的概念其實可以看成是在沒有物件導向的 C 裡面的 proxy pattern....)
--
"LPH" is for "Let Program Heal us"....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.28.92