c++设计问题.模板新手
C++ design issue. New to templates
我对c++模板相当陌生。
有一个类,它的构造函数有两个参数。它是一个保存数据列表的类——它实际上是一个国际象棋程序中的走法列表。
我需要保持我的原始类,因为它在其他地方使用,但我现在需要传递额外的参数给类,这样做有一些额外的私有数据成员,只专门化一个私有方法——其他一切将保持不变。我不认为派生类在这里对我有帮助,因为它们不会是类似的对象,而且私有方法是由构造函数调用的,它将调用基类的虚方法——而不是派生方法。
所以我想模板就是我的答案。我只是想知道下一步该怎么做。
Thanks in advance
你猜错了。模板不能像继承一样解决你的问题。
正如jtbandes在你的问题下面的评论中所说,使用组合。
创建另一个包含现有类的实例作为成员的类。根据需要将操作转发或委托给该包含对象(即,新类中的成员函数调用包含对象的成员函数)。根据需要添加其他成员,以及与它们一起工作的操作。
编写与新类交互的新代码。当你的新代码需要与旧代码交互时,根据需要传递包含的对象(或指向它的引用或指针)。
您可以选择将容器实现为模板,但这是一个实现选择,取决于您希望如何重用容器。
当您希望在编译时传递值、类型名或类等参数时,可以使用模板。当您希望对相同的方法使用完全相同的类,但将其应用于不同的参数时,可以使用模板。我认为你所描述的情况并非如此。
如果它们不是相似的对象,您可能需要创建一个专门的类(或函数集合)来从各种其他类中使用。
此外,您可以考虑创建一个基类并根据需要扩展它。使用虚拟私有方法应该允许您在运行时选择对象的方法实现,而不是基类的方法。
如果您指定它们需要共享什么,我们可能会帮助您更多,您的类有什么共同之处?
当前代码的概要如下:
class move_list{
public:
move_list(const position& pos, unsigned char ply):pos_(pos),ply_(ply){
//Calculates moves and calls add_moves(ply,target_bitboard,flags) for each move
}
//Some access functions etc...
private:
//private variables
void add_moves(char,Bitboard,movflags);
};
Add_moves在向量上的移动在生成时没有特定的顺序。但是,我的新类除了需要额外的数据外,与此完全相同:
move_list(const position& pos, unsigned char ply,trans_table& TT,killers& kill,history& hist):pos_(pos),ply_(ply),TT_(TT),kill_(kill),hist_(hist) {
和add_moves函数需要更改,以使用额外的数据在接收到移动时按顺序排列。其他的都是一样的。我想我可以写一个额外的方法来对列表进行排序,但是从以前的经验来看,在列表收到它时进行排序要快得多。
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 我是编码新手,我面临一个问题
- 安装 QT 后的新手问题 - 错误:未知类型名称"QApplication"
- 安装/理解c++库的问题(新手程序员)
- C++新手,我在调用函数时遇到问题
- MPI 新手 - 关于'mpirun'如何工作和流程管理的一些问题
- C++新手 - 基本计算器问题
- 涉及while循环和OR语句的新手C++问题
- 关于 Physx 3 的几个新手问题
- 我是C++新手,我有几个问题想问
- 本征的新手问题
- c++设计问题.模板新手
- 编程新手,类的问题,需要帮助来显示我哪里出了问题
- C++的新手,使用"=="的字符串相等性问题
- 这段代码有什么问题?我是 c++ 的新手!
- 关于C++数组的新手问题
- 新手程序员的基本C++问题