c++ - 为什么 std::function 接受不匹配的签名
问题描述
考虑一下:
#include <functional>
#include <type_traits>
void foo(std::function<void(double)>) {}
template <typename T>
struct S {
T function;
};
int main() {
auto f = std::function<bool(double)>([](double) { return true; });
foo(f);
S<std::function<void(double)>> s;
s.function = f;
static_assert(std::is_same_v<decltype(f), std::function<void(double)>>);
}
为什么foo(f)
可以使用不同的函数类型进行调用?
断言说它们不一样,但为foo
.
这里的转换规则是什么?
如果 struct可以分配一个不匹配的函数S
,我该怎么办?s.function = f
有没有办法在编译时避免这个赋值,只允许精确匹配的类型?
解决方案
推荐阅读
- python - 在熊猫数据框中成对计数
- dataframe - 从 Redshift 读取 Spark DataFrame 返回空 DataFrame
- nginx - 基于 http_accept_language 的 docker nginx 重定向
- git - 推送到 Git 存储库时的 i/o 超时
- c++ - 在我的 C++ 代码中使用 Gnu Plot 的详细方法是什么?
- python - 纯python的数据类型转换比numpy快
- wordpress - Wordpress 更改固定链接
- python - Python 正则表达式:如何实现一个正则表达式来检查匹配的括号集?
- node.js - 在 Joi (Node.js) 中使用外部函数进行验证
- python - Python - 方法参数中的值解包顺序