C++模板类和返回类型作为约束

Dav*_*ita 2 c++ templates return-type

抱歉这个愚蠢的问题,但我对C++很陌生.

我有一个AlertInfoBase在我的项目中调用的基类.它有几十个子类.现在我想要一个类模板,它将有一个方法filter().此方法将始终返回引用AlertInfoBase.这是代码:

template <class T>
class AlertInfoFilter
{
public:
    AlertInfoFilter() { }
    AlertInfoBase & filter(T & alertInfo)
    {
        return alertInfo;
    }
};
Run Code Online (Sandbox Code Playgroud)

如您所见,方法过滤器只返回传递的参数.我的目标是创建filter()使用模板专门化的替代实现,但这不是我现在的问题/问题.我面临的一件奇怪的事情是,当我将一个类的实例传递给filter()子类的实例时AlertInfoBase,一切都按预期工作.它返回相同的引用,但是当我传递一个没有实现的类的实例时AlertInfoBase,项目不会编译.实际上这是我想要的那种行为,但有些澄清为什么会发生这种情况会很好.编译器是否足够聪明,猜测由于返回类型,我使用不正确的参数填充方法?

谢谢

PS我正在使用MinGW编译器.

Man*_*rse 5

您可以将模板视为代码生成机制.模板的特定实例化在大多数方面与手动编写的代码相同,该代码仅在适当时替换模板参数.在您的示例中,如果您AlertInfoFilter使用std::string(作为不从AlertInfoBase继承的类的示例)进行实例化,则将生成以下代码(大约):

class AlertInfoFilter_string
{
public:
    AlertInfoFilter_string() { }
    AlertInfoBase & filter(std::string & alertInfo)
    {
        return alertInfo;
    }
};
Run Code Online (Sandbox Code Playgroud)

显然,这不应该编译.