gpt4 book ai didi

c++ - 推导 std::function 结果类型并将其用作参数

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:12 26 4
gpt4 key购买 nike

这就是我的简单类的样子。

template <class T>
class A {
T first;
T second;

public:
A(T f, T s) : first(f), second(s) {};

template <class F>
auto foo(F f) -> decltype(f(T(), T())) {
return f(first, second);
}
};

int main() {
A<int> a = A<int>(2, 3);
a.foo([](int l, int r)->int{return l + r;});
}

我希望 foo 接受一个函数(或 lambda 或函数指针)f,该函数接受两个 T 类型的属性并返回 f() 的结果。

此代码有效,但我创建了虚拟参数以获得 decltype 的结果。在这种情况下,这些是简单的整数,但它可以是任何东西,而且我当然不想从更大的类构造虚拟参数。怎么处理?

此外,这只是一个简化的案例。在我的例子中,foo 看起来像这样:

foo(function f, result_type_of_f t1, result_type_of_f t2) {
// do something
return f(first, second, t1, t2);
}

我无法使用与第一个类似的方法来完成,我也尝试了这篇文章中的方法 Determining return type of std::function但无济于事。

最佳答案

您可以随意为 decltype 创建一个复杂的参数。

decltype 在编译时进行计算,不会生成任何代码。编译器将在“空运行”模式下完成构建所有参数的 Action ,找出结果返回类型并使用它。

的确,对于复杂的 C++ 代码,由于 decltype、模板和其他构造函数,编译器必须完成的所有工作确实会减慢编译速度;但是 decltype 最终不会导致运行时开销,无论 decltyped 是什么。

关于c++ - 推导 std::function 结果类型并将其用作参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41780159/

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