[C ++]:重构弃用的协变返回类型警告

时间:2016-04-02 04:05:49

标签: c++ oop gcc gcc-warning

所以,不久前,我写了一个包含一些看起来像这样的模板类的库:

class baseClass {
    public:
        virtual void * getIndex(int index);
};

template <class T>
class myClass : baseClass {
    public:
        T * getIndex(int index);
};

然后为getIndex创建了int的专用版本:

template <> int * myClass<int>::getIndex(int index) {
    // Do stuff
}

这会在gcc 4.7.2:

下产生以下编译器警告
warning: deprecated covariant return type for 'T* myClass<T>::getIndex(int) [with T = int]' [enabled by default]

现在,我通常不会非常关心这一点,但最近我执行我的库的Mac端口变得至关重要,并且Mac上的gcc对此更为严格。除此之外,我还是想要消除它(代码味道和所有这些)。

我的需求是双重的:我必须同时保留baseClass(以及myClass来自baseClass的推导)和myClass的专用版int (或者与int完全相同的东西),但后者不能依赖于弃用的行为。这样做的最佳方法是什么?

我已经考虑过为int编写一个包装类(如Java中所见),但这本身就是一个维护问题,如果可能的话我宁愿避免(特别是因为我还需要在我当前的实现中为floatchar执行此操作。有更好的解决方案吗?或者是一个包装C ++原语的现有库?

0 个答案:

没有答案