假设我有一个类,如:
template<class TYPE>
class RandomAccessBox {
//...
public:
void insert (TYPE x){
//insert something into the box
}
int size(){
//return number of elements in the box
}
TYPE randomaccess(){
//return random object in the box
}
TYPE deletelast(){
//delete last item accessed from the box
}
};
我有一个使用RandomAccessBox所有的地方项目。
现在我想一些运行时的专业化假设。也就是说,当初始化我RandomAccessBox,我想将它设置为1型或2型,假设(和类型将永远不会改变)。功能和类的成员将是这两种类型相同,但我希望能够简单地改变取决于类型的函数的行为。 (例如,也许我想改变的东西是如何存储和随机访问)。
问题的关键是,我不想让代码的其余部分有关心我有哪种类型的RandomAccessBox的,因为公开面向功能和成员将是相同的,并且这两种类型都以同样的方式使用。
我特别希望能够有类似的功能
void statisticsonbox(RandomAccessBox mybox){
//do some stuff with mybox
}
其是不可知的myBox上的类型。
很显然,我可以有一个内部变量存储类型,然后根据该变量的状态有各功能的情况下。这RandomAccessBox是“在内部循环”,虽然如此,与之相关的任何处罚是一个问题。 (也许现实基本上没有从外壳像这样与现代的处理器罚?)
我还可以使用函数指针。
有另一种方式,这是应该做?
这RandomAccessBox是“在内部循环”,虽然如此,与之相关的任何处罚是一个问题。 (也许现实基本上没有从外壳像这样与现代的处理器罚?)
您需要使用模板依赖于RandomAccessBox
代码的整个部分。 F.e:
template <class TYPE>
void statisticsonbox(RandomAccessBox<TYPE> mybox){
//do some stuff with mybox
}
否则,你将不得不以某种方式确定行为在每次迭代(使用虚拟方法,类型确定和分支等),这将不可避免地导致的性能损失(如果这是你的情况非常重要)。这种方法可能会造成问题 - 增加编译时间,输出文件的大小,改变代码使用模板的显著部分。你需要的类型依赖和独立的部分分离出来,并选择最佳比例。