gpt4 book ai didi

c++ - 在没有模板的情况下评估另一个类的动态函数指针

转载 作者:行者123 更新时间:2023-11-28 07:27:17 26 4
gpt4 key购买 nike

我有一个自动插入 2D 函数的类(对此非常满意)。它接受指向被插值方法的动态函数指针。我不得不模板化类,因为我需要对象实例和指针。

我可以避免将类模板化吗?或者我是否需要继续这样做才能接受对象实例作为参数?基类可能吗? (我对 C++ 还很陌生)

我的方式是(缩写):

template<class F>
class Interpolate {
Interpolate(double (F::*f)(double, double), F & obj, ...) {
...
double value = (object.*f)(x,y);
...
}
}

最佳答案

正如评论中指出的,您还可以使用 std::function。这为您提供了更多使用 std::bind 的灵 active 。另一方面,std::function 可能会在堆上分配结果函数,这会导致很大的开销(这可以通过使用 std::cref() 来避免)。关于 std::function 与模板执行时间差异的非常有趣的讨论可以在 std::function vs template 找到。 .

"请注意,std::function 能够存储不同类型的可调用对象。因此,它必须为存储执行一些类型删除魔术。通常,这意味着动态内存分配(默认情况下通过调用 new )。众所周知,这是一个相当昂贵的操作。”Cassio Neri - 这是 std::cref 可以提供帮助的地方,特别是因为在我刚刚写的链接中讨论的示例中,没有 std::cref,堆分配std::function 使程序减慢了 10 倍!

关于c++ - 在没有模板的情况下评估另一个类的动态函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18537479/

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