gpt4 book ai didi

c++ - 确定与 std::function 兼容的函数类型集的规则?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:51 26 4
gpt4 key购买 nike

假设我有这个,

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

那么我如何确定 fs 的函数集(或函数对象)可以初始化吗?

以下哪些是允许的,哪些不是:

std::function<int(int,int)> fs = [](int, int) { return int(10); };
std::function<int(int,int)> fs = [](char, char) { return char(10); };
std::function<int(int,int)> fs = [](int, short) { return int(10); };
std::function<int(int,int)> fs = [](double, int) { return float(10); };
std::function<int(int,int)> fs = [](int, wchar_t) { return wchar_t(10); };

std::function<int(int,int)> fs = [](const char*, int){ return "string"; };
std::function<int(int,int)> fs = [](const char*, int){ return 10; };
std::function<int(int,int)> fs = [](const char*, int){ return std::string(); };

当然,我可以编译并查看哪个编译好,哪个编译不好。但这并不能帮助我理解参数类型和返回类型的变化。我可以为他们使用不同的类型多远?

换句话说,如果我给了一个函数(或函数对象),我如何在编译时确定它是否与 std::function<int(int,int)> 兼容?或不?我了解的很少,但我不够自信。

所以请帮助我理解和制定确定与 std::function<R(T1,T2)> 兼容的函数类型集的规则?如果用户使用不兼容的函数,元编程可以帮助我通知用户,生成漂亮的错误消息吗?

顺便说一句,第一组似乎是兼容的:http://ideone.com/hJpG3

最佳答案

对象(函数指针或仿函数)必须是可调用的,具有给定的参数类型,即 fun( declval< Types >() ... )格式正确且可隐式转换为 R .

具体参见 C++11 §20.8.2;它给出了指向成员的指针等的各种特殊情况。§20.8.11.2/2 和 20.8.11.2.1/7 将其与 std::function 联系起来构造函数。

关于c++ - 确定与 std::function<R(T1,T2)> 兼容的函数类型集的规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8297915/

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