我不知道如何標題這個問題。我有一個基類和兩個繼承類:將函數指針插入具有多態返回類型的映射
class Base {};
class Action : public Base {};
class Title : public Base {};
現在,讓我們說,我有兩個函數返回要麼Action *
或Title *
:
Action *getAction() { return new Action; }
Title *getTitle() { return new Title; }
有什麼辦法把這兩個功能整合到一個地圖?像這樣:
int main()
{
std::map<std::string, Base *(*)()> myMap;
myMap["action"] = getAction;
myMap["title"] = getTitle;
return 0;
}
現在,我得到一個錯誤:
invalid conversion from `Action* (*)()' to `Base* (*)()'
我可以改變的功能簽名總是返回基類,然後它的工作,但我不知道是否有另一種方法來解決這個問題。
查看['std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function),或作爲[Boost函數](http:// www .boost.org/doc/libs/1_52_0/doc/html/function.html)庫。 –
或返回'Base *' –
是否有可能得到這個問題的背景,就像你使用它的目的? – Gaminic