WEB开发网
开发学院软件开发VC ATL布幔之下的秘密(3) 阅读

ATL布幔之下的秘密(3)

 2006-07-22 22:54:58 来源:WEB开发网   
核心提示: 程序的输出为:Round1::PlayRound2::PlayATL就是使用Strategy设计模式来实现线程的,代理设计模式也可以使用模板实现,ATL布幔之下的秘密(3)(8),智能指针就是一个例子,下面就是一个没有使用模板的简单版本智能指针,程序47.#include <iost

程序的输出为:

Round1::Play
Round2::Play

ATL就是使用Strategy设计模式来实现线程的。

代理设计模式也可以使用模板实现,智能指针就是一个例子。下面就是一个没有使用模板的简单版本智能指针。

程序46.

#include <iostream>
using namespace std;
class Inner {
public:
 void Fun() {
  cout << "Inner::Fun" << endl;
 }
};
class Outer {
private:
 Inner* m_pInner;
public:
 Outer(Inner* p_pInner) : m_pInner(p_pInner) {
 }
 Inner* operator -> () {
  return m_pInner;
 }
};
int main() {
 Inner objInner;
 Outer objOuter(&objInner);
 objOuter->Fun();
 return 0;
}
  

程序的输出为:

Inner::Fun()

简单地说来,我们仅仅重载了->运算符,但是在实际的智能指针中,所有必须的运算符(例如=、==、!、&、*)都需要被重载。以上的智能指针有一个大问题:它只能包含指向Inner对象的指针。我们可以编写Outer类模板来取消这一限制,现在让我们来略微修改一下程序。

程序47.

#include <iostream>
using namespace std;
class Inner {
public:
 void Fun() {
  cout << "Inner::Fun" << endl;
 }
};
template <typename T>
class Outer {
private:
 T* m_pInner;
public:
 Outer(T* p_pInner) : m_pInner(p_pInner) {
 }
 T* operator -> () {
  return m_pInner;
 }
};
int main() {
 Inner objInner;
 Outer<Inner> objOuter(&objInner);
 objOuter->Fun();
 return 0;
}

程序的输出和前一个一样,但是现在Outer类就可以包含任何类型了,只需要把类型作为模板参数传递进来即可。

上一页  3 4 5 6 7 8 9 10  下一页

Tags:ATL 之下 秘密

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接