對不起,這個愚蠢的問題,但我很新的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