gpt4 book ai didi

带有静态调度的 C++ lambda

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

在 c++ 中是否有一种方法可以将同名函数捕获到一个函数对象中,该函数对象可以通过静态调度作为回调传递?

#include <cstdio>
using std::printf;

void foo(int a) {
printf("foo a %d\n", a);
}

void foo(float b) {
printf("foo b %f\n", b);
}

struct A {
int a;
float b;
void operator()(int a) {
printf("A a: %d\n", a+a);
}
void operator()(float b) {
printf("A b: %f\n", b*b);
}
};

template <typename Func>
void foobar(Func func) {
// static dispatch
func(3);
func(2.125f);
}

int main() {
int a = 123;
float b = 1.23f;
foobar(A{a,b}); // this is ok, but I have to write that struct manually
foobar(foo); // ERROR could not infer tempate argument, but this is what I want.
foobar([](int a){ printf("λa "); foo(a); }
(float b){ printf("λb "); foo(b); });
// ERROR fictional syntax that doesn't exist
}

最佳答案

在 c++14 中,您可以使用通用 lambda:

foobar([](auto as){ foo(as); });

Demo

或者对于真正的转发:

foobar([](auto&&... as) { foo(decltype(as)(as)...); });

Demo

关于带有静态调度的 C++ lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33368295/

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