与不同的行为C ++成员函数在初始化定义

问题描述 投票:0回答:1

假设我有一个类,如:

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是“在内部循环”,虽然如此,与之相关的任何处罚是一个问题。 (也许现实基本上没有从外壳像这样与现代的处理器罚?)

我还可以使用函数指针。

有另一种方式,这是应该做?

c++ function class member
1个回答
1
投票

这RandomAccessBox是“在内部循环”,虽然如此,与之相关的任何处罚是一个问题。 (也许现实基本上没有从外壳像这样与现代的处理器罚?)

您需要使用模板依赖于RandomAccessBox代码的整个部分。 F.e:

template <class TYPE>
void statisticsonbox(RandomAccessBox<TYPE> mybox){
  //do some stuff with mybox
}

否则,你将不得不以某种方式确定行为在每次迭代(使用虚拟方法,类型确定和分支等),这将不可避免地导致的性能损失(如果这是你的情况非常重要)。这种方法可能会造成问题 - 增加编译时间,输出文件的大小,改变代码使用模板的显著部分。你需要的类型依赖和独立的部分分离出来,并选择最佳比例。

© www.soinside.com 2019 - 2024. All rights reserved.