gpt4 book ai didi

c++ - 在没有函数指针/内联的情况下将 C++ 函数作为参数传递?

转载 作者:行者123 更新时间:2023-11-28 06:33:47 35 4
gpt4 key购买 nike

在不使用函数指针的情况下,将函数(具有相同的输入参数/返回类型)作为参数传递给另一个函数的正确方法是什么?我希望传入的函数参数在调用时内联吗?好吧,我只是不想要指针间接。

我发现了这个:

Pass a function as an explicit template parameter

不过好像是用了函数指针。

编辑:我真的真的很想避免必须创建结构来存储每个函数参数的行为。

最佳答案

如果你在编译时知道特化,你只需要传递类型信息:

void inlined_function() {}; // function you want to pass

template<typename F> void caller1() {
inlined_function(); // not passed through pointer, call inline
}

如果您可以控制内联函数,请将其实现为仿函数:

struct X {
inline void operator()() // inline function
{
}
};

template<typename F> void caller2(F functor) {
functor(); // inline call
}

两种变体的客户端代码:

caller1<inlined_function>();
caller2(X{});

编辑:

如果您无法控制将仿函数编写为结构,请为其编写一个内联结构包装器。

例如,您有 void inlined_function() {}; 并且需要编写 caller2。在这种情况下,编写一个类似于 X 的仿函数调用 inlined_function,或者(更好的)一个 lambda:

template<typename F> void caller2(F functor) {
functor(); // inline call
}

caller2( [](){ inlined_functor(); } );

关于c++ - 在没有函数指针/内联的情况下将 C++ 函数作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27102660/

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