quentinliu

天下之事败于懒与私

C++博客 首页 新随笔 联系 聚合 管理
  1 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks
最近接到一个模块,是要求做一个管理器,把一些控件屏蔽掉,, 控件都是指针。操作都是通过指向符 大体上是
 

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 on 2011-01-14 14:12 烟圈 阅读(1349) 评论(5)  编辑 收藏 引用

Feedback

# re: 最近编程想到的一种思路。不知道有没有可能实现 2011-01-14 15:22 right
不太理解你的真实意图,根据你的第一句话的描述,如果控件的接口不一致的话,可以考虑Adapter结合Visitor模式。  回复  更多评论
  

# re: 最近编程想到的一种思路。不知道有没有可能实现 2011-01-14 15:56 烟圈
插入了一段代码。。。。应该大体上是这个思路。。。求高人指点迷津。  回复  更多评论
  

# re: 最近编程想到的一种思路。不知道有没有可能实现[未登录] 2011-01-15 16:50 a
看不懂,空的外包类也是一个新的button啊,fun1()只是显示初始值  回复  更多评论
  

# re: 最近编程想到的一种思路。不知道有没有可能实现 2011-01-15 16:56 quentinliu
@a
是新的类。。我在想有没有可能通过什么技巧实现 被外包类覆盖过的原始类调用函数都调用一个覆盖函数呢 @。@,换句话就是Hook掉 原类的成员函数。。  回复  更多评论
  

# re: 最近编程想到的一种思路。不知道有没有可能实现 2011-01-21 00:13 arrow8209
你去了解一下智能指针,跟你的这个功能有点像,但是不是这样实现的。
我大致明白你的意思,你看这样行不行。
template <class T>
class UIHander: public T
{
T* m_p;
//你重载了这操作符,函数里面你想怎么玩就怎么玩
T* operator ->(){return m_p;}
void SaySomthing(){}
}

main()
{
MyButton *p = new MyBUtton();
UIHander<MyButton> tmp;
tmp.m_p = p;
tmp->Func1();
tmp.SaySomting();
}  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理