从C++到.NET:将本机C++映射到通用类型系统2009-12-23 MSDN Stanley B. Lippman

目录关键字的意外之处继承复制语义在新语言的教训下期内容在本专栏中将文本查询语言 (TQL) Query 类层次结构从 C++ 转换为 .NET 通用类型系统 (CTS)。在这里,我将使用 C++/CLI,但您也可以使用 C#。C++/CLI 的主要优点是可以使应用程序逐步转化,使源代码级能够混合使用本机和托管 C++ 代码。首先,让我们看看本机 Query 基类的实现,如图 1 所示。

Figure1本机抽象 Query 基类
#include <vector>
#include <iostream>
#include <set>
#include <string>
#include <utility>
using namespace std;
typedef pair< short, short > location;
class Query {
public:
virtual ~Query(){ delete _solution; }
Query& operator=( const Query& );
// 操作的虚拟集......
virtual void eval() = 0;
virtual Query *clone() const = 0;
virtual ostream& print( ostream &os ) const = 0;
virtual bool add_op( Query* ) { return true; }
virtual void display_solution( ostream &os = cout, int tabcnt = 0 );
// 已融入的查询范围的操作
void handle_tab( ostream &os, int tabcnt ) const;
void display_partial_solution();
const set< short > *solution();
const vector< location > *locations() const { return &_loc; }
// 支持识别查询中嵌入的括号,
// 如 alice && ( fiery || magical )
void lparen( short lp ) { _lparen = lp; }
void rparen( short rp ) { _rparen = rp; }
short lparen() { return _lparen; }
short rparen() { return _rparen; }
void print_lparen( short cnt, ostream& os ) const;
void print_rparen( short cnt, ostream& os ) const;
protected:
Query() : _lparen( 0 ), _rparen( 0 ), _solution( 0 ) {}
Query( const Query &rhs )
: _loc( rhs._loc ), _solution( 0 ),
_lparen( rhs._lparen ), _rparen( rhs._rparen )
{}
Query( const vector<location> &loc )
: _loc( loc ), _solution( 0 ),
_lparen( 0 ), _rparen( 0 )
{}
set<short>* _vec2set( const vector<location>* );
short _lparen;
short _rparen;
vector<location> _loc;
set<short> *_solution;
};