对不起,这个愚蠢的问题,但我很新的C++。C++模板类和返回类型作为约束
我在我的项目中有一个叫做AlertInfoBase
的基类。它有几十个子类。现在我想要一个类模板,它将有一个方法filter()
。此方法将始终返回对AlertInfoBase
的引用。代码如下:
template <class T>
class AlertInfoFilter
{
public:
AlertInfoFilter() { }
AlertInfoBase & filter(T & alertInfo)
{
return alertInfo;
}
};
正如您所看到的,方法过滤器只是返回传递的参数。我的目标是使用模板专门化创建filter()
的替代实现,但这不是我现在的问题/问题。 我面临的奇怪的事情是,当我将一个类的实例传递给filter()
(从AlertInfoBase
继承而来)时,一切都按预期工作。它返回相同的引用,但是当我传递一个不实现AlertInfoBase
的类的实例时,该项目不会编译。其实这是我想要的那种行为,但有些澄清为什么发生这种情况会很好。编译器是否足够聪明地猜测,由于返回类型而使用不正确的参数填充方法?
谢谢
P.S.我正在使用MinGW编译器。
我会非常感兴趣你将如何实现该操作符:)我可以想出一些有意思的方法,但除非类型为“is-a”或“has-a”AlertInfoBase,否则似乎并不适合:)(请注意,这是我在'答案'中暗示'可转换为'而不是'派生自') – sehe
它也适用于共享单个AlertInfoBase的垫片。 – MSalters