所以,不久前,我写了一个包含一些看起来像这样的模板类的库:
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中所见),但这本身就是一个维护问题,如果可能的话我宁愿避免(特别是因为我还需要在我当前的实现中为float
和char
执行此操作。有更好的解决方案吗?或者是一个包装C ++原语的现有库?