将模板化函数调用包装在另一个函数调用中

雅各布·默森

任何人都知道是否可以做类似以下的事情:

void my_inner_func(int i, double d, ...) { 
    // do stuff here
}

template <typename Func, typename... Args>
void my_outer_func(Func&& f,Args&&... args){
    // do other stuff here, put this inside loop, etc
    f(std::forward<Args>(args)...);
}

template <typename OuterFunc,typename InnerFunc,typename... Args>
void func(OuterFunc&& outer, InnerFunc&& inner, Args&&...args) {
    outer(std::forward<InnerFunc>(inner),std::forward<Args>(args)...);
}

调用代码可能如下所示:

func(my_outer_func, my_inner_func, 1, 2.0, ...);

我遇到的问题是无法推断出 OuterFunction 的类型。我尝试了很多不同的事情,包括将 func 转换为仿函数并使 OuterFunc 成为模板模板参数。

约翰·兹温克

如果您创建my_outer_func一个函数对象而不是函数,它会起作用:

struct my_outer_func {
    template <typename Func, typename... Args>
    void operator()(Func&& f,Args&&... args) const {
        // do other stuff here, put this inside loop, etc
        f(std::forward<Args>(args)...);
    }
};

然后:

func(my_outer_func(), my_inner_func, 1, 2.0);

如果您不喜欢调用站点的括号,则可以在创建全局结构实例时删除它们:

struct {
    template <typename Func, typename... Args>
    void operator()(Func&& f,Args&&... args) const {
        // do other stuff here, put this inside loop, etc
        f(std::forward<Args>(args)...);
    }
} my_outer_func;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在循环中调用 Blazor 模板函数,包装在另一个 HTML 元素中?

将一个函数包装在另一个函数中

在模板化的Rcpp函数中调用另一个cpp函数

react-native 如何从另一个包装在 react-redux 中的 connect() 类调用函数?

无法将StripPrefix包装在另一个函数中(缺少ServeHTTP方法)

С++将lambda包装在函数内的另一个lambda中

将PostgreSQL函数包装在另一个函数中,以有条件地合并结果

尝试将reduce函数包装在另一个函数中,以使其更通用

另一个类的模板成员函数中的模板类中的调用方法

将模板包装在另一个模板中

在另一个函数中调用被“隐藏”的函数

从另一个函数中调用类函数

在另一个函数中调用匿名函数

C++:使用模板将任何 lambda 包装在另一个 lambda 中

在另一个函数调用中调用一个函数

调用另一个函数时调用函数

如何调用也在AWS SAM模板中定义的另一个lambda函数?

R将函数调用包装到另一个调用中,而无需使用字符串操作

从一个函数中调用另一个函数内部的函数

Python从另一个函数调用一个函数中的函数

在鱼壳中调用另一个函数

在另一个$ .ajax中调用$ .ajax函数

从Python中的另一个文件调用函数

在go中从另一个函数调用变量

从Go中的另一个包调用函数

从BrightScript中的另一个文件调用函数

从另一个文件中调用Python函数

在ReactJs中从另一个函数调用

在另一个Lisp文件中调用函数