gpt4 book ai didi

c++ - 将函数指针插入具有多态返回类型的映射

转载 作者:行者123 更新时间:2023-11-30 02:58:48 25 4
gpt4 key购买 nike

我不知道如何给这个问题起标题。我有一个基类和两个继承类:

class Base {};
class Action : public Base {};
class Title : public Base {};

现在假设我有两个返回 Action *Title * 的函数:

Action *getAction() { return new Action; }
Title *getTitle() { return new Title; }

有什么办法可以把这两个函数放到一个map中吗?像这样:

int main()
{
std::map<std::string, Base *(*)()> myMap;
myMap["action"] = getAction;
myMap["title"] = getTitle;

return 0;
}

现在我收到一个错误:

invalid conversion from `Action* (*)()' to `Base* (*)()'

我可以更改函数的签名以始终返回基类,这样就可以了,但我想知道是否还有其他方法可以解决这个问题。

最佳答案

如果您使用:

Base *getAction() { return static_cast<Base *>(new Action); }
Base *getTitle() { return static_cast<Base *>(new Title); }

那么你就不会得到这个错误。

std::function是STL提供的多态函数指针包装器。

当然,使用模板,您可以编写自己的函数包装器来存储目标、传递前向参数并进行转换。不过,这已经完成了,在决定推出自己的产品之前,您应该认真仔细考虑。除非您喜欢重新发明轮子或有非常特殊的要求。

关于c++ - 将函数指针插入具有多态返回类型的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13451454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com