quentinliu

天下之事败于懒与私

C++博客 首页 新随笔 联系 聚合 管理
  1 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

2011年1月14日 #

最近接到一个模块,是要求做一个管理器,把一些控件屏蔽掉,, 控件都是指针。操作都是通过指向符 大体上是
 

m_pBtn -> 00xx();
现在考虑的方法是 创建一个空的外包类,然后切换进去。。
template <class T>
class UIHander: public T
{
}
;

然后把当前指针替换进去。。

template <class T>
void ReplaceType2Type(T* & pData)
{
    
//记录原始 pData
    .

   pData 
= new UIHander<T>;
}

. pData ->Function(); //空
这样子pData进行的以后 进行的操作都是无操作了现在想的问题是。 定义UIHander 为新的 
 
class UIHander: public T
{
public:
virtual void CallHandle(){say("disable")}
}
;
有没有可能调用所有的 控件的成员函数。
pData ->Function1();
pData 
->Function2();
pData 
->Function3();
 的时候 都调用成为
UIHander::CallHandle()
呢 .不知道这种思路能不能走通。。。


#include <iostream>
using namespace std;

class MyButton
{
    
public:
    MyButton():x(
0),y(0){}
    
virtual ~MyButton(){}

    
public:
    
void SetXY(int p1,int p2)
    
{
        x 
= p1;
        y 
= p2;
    }

    
void Func1()
    
{
        cout 
<<"x = " << x<< " " <<"y = " <<<<endl;
    }

    
private:
    
int x;
    
int y;


}
;

template 
<class T>
class UIHandle:public T
{
    
void SaySomthing(){}
}
;

template 
<class T>
void HandleFunction(T*& pData)
{
    
//-保存先不管

    pData 
= new UIHandle<T>;
}


int main()
{
    
//MyButton myBtn;
    MyButton* pButton = new MyButton;
    pButton 
->SetXY(100,99);
    
//cout << "Hello world!" << endl;
    pButton ->Func1();          //输出 100,99

    HandleFunction(pButton);

    pButton 
->Func1();      //变成空类了。。输出 0.0
    
    
//-考虑的情况是这里。。。。。Func1 能不能通过什么方法实现到 调用 SaySomthing() {}

    
return 0;
}


顺便牢骚下。。。opera下这个blog怎么不能排版 T.T
posted @ 2011-01-14 14:12 烟圈 阅读(1340) | 评论 (5)编辑 收藏

仅列出标题