2013-11-21 147 views
1

考虑到一个指向函数的指针返回另一个指向另一个函数的指针是C中用来引入一些运行时多态/回调的机制,实现这个的等效方式是什么在C++中,同时改善局部性并降低关于指针和间接指向的成本?函数指针在C++中返回另一个函数指针与地方

例如this syntactic sugar可以帮助,但我并不是真的对此感兴趣,尽管这是一种以C++方式而不是更多C-ish做事情的好方法,我更感兴趣的是在尝试改进本地减少运行时显式指针的使用。

+0

你想做什么?向我们展示这样做的旧方法(代码)。我们不能根据猜测来改进事物。 – user694733

+0

@ user694733我没有添加任何具体的例子,因为这会使讨论极化,我不期待任何其他用户的代码片段,这个问题更多的是关于设计和性能,而不是实际的代码。 – user2485710

+0

性能总是与特定应用程序相关联。没有通用指南:*“做X并且总是会更快”*。对于你的问题虚拟功能似乎要走的路。根据我的经验,他们提供的灵活性一直是比可忽略的性能成本更大的因素。如果你想改善分支预测等事情,你需要首先显示确切的问题,因为答案将取决于此。 – user694733

回答

3

关于为什么人们在C中使用函数指针来模拟多态性的真正原因不是性能,而是C既不支持真正的多态性也不支持模板的事实。这是你在C++中的两种选择。所有三种方法在this thread进行比较。

请注意,即使调用函数指针不需要虚函数调用执行的附加vtable查找,调用虚函数和函数指针也会遇到同样的主要性能问题:两种情况下的分支预测都不可靠,你倾向于结束更多的管道冲洗。

+0

这就是我想要做的,我试图帮助CPU与地方。 – user2485710

+0

正如[链接的线程](http://stackoverflow.com/questions/1955074/virtual-methods-or-function-pointers)中指出的那样,您可以通过使用模板获得最佳性能。但在大多数情况下,它不值得从中产生不利之处。关于使用模板最糟糕的是[隐藏的编译器错误](http://programmers.stackexchange.com/questions/70086/why-are-c-template-error-messages-so-horrific)。 – Domi

0

我认为你可以使用虚拟功能来满足部分要求。

+0

我想避免这一点,原则上,我也想通过设计来避免虚拟功能。 – user2485710