gpt4 book ai didi

c++11 - 让 result_of、decltype、std::function 和可变参数模板协同工作

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

我在使用 std::result_of、decltype 和 std::function 时遇到了很多麻烦

使用可变参数模板。

我有以下功能函数 -

int foo(int a, int b, int c) {
std::cout << a << b << c << std::endl;
return 0;
}

还有下面的类

template <class T, class... Args>
class VariadicTest {
public:
VariadicTest(const T& func, Args... args) : func(func) {};
private:
T func;
};

我希望类中有一个成员来保存一个 lambda 表达式,

为此我需要一个 std::function 。

我的问题是如何正确定义 std::function。

这个类的用例看起来像 -

VariadicTest(foo, 1,2,3);

所以现在我有 T = int __cdecl (int, int, int) 和 Args = (int - 1, int - 2, int - 3)

从这里我想要一个看起来像这样的成员函数:

std::function<std::result_of<T(Args...)::type(Args...)>

现在这当然不能编译,我试过的 50 多个其他东西也没有编译。

基本上我需要这个例子下面的声明

std::function<int(int,int,int)> _f;

当然,要根据给定的 T 和 Args 自动执行此操作。

最佳答案

尝试以下操作:

template <class T, class... Args>
class VariadicTest {
public:
VariadicTest(const T& func, Args... args) : func(std::bind(func, args...)) {};
private:
using result_type_t = typename std::result_of<T(Args...)>::type;
std::function<result_type_t()> func;
};

关于c++11 - 让 result_of、decltype、std::function 和可变参数模板协同工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23418468/

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