c++ - 显式转换为 std::function
问题描述
我正在尝试定义从某个类到这样的显式转换:std::function
#include <functional>
class ExpInt { private:
const int value;
public:
ExpInt(const int v):value(v){}
explicit operator std::function<int (void)> ()
{
return [=](void){ return value; };
}
};
int main(int argc, char **argv)
{
auto e = new ExpInt(44);
auto f = static_cast<std::function<int (void)>>(e);
return 0;
}
但是当我编译它时,我得到以下错误:
$ g++ main.cpp -o main
main.cpp: In function ‘int main(int, char**)’:
main.cpp:16:51: error: no matching function for call to ‘std::function<int()>::function(ExpInt*&)’
auto f = static_cast<std::function<int (void)>>(e);
^
解决方案
编译器告诉你出了什么问题:
error: no matching function for call to ‘std::function<int()>::function(ExpInt*&)’ auto f = static_cast<std::function<int (void)>>(e); ^
指向的指针ExpInt
不可转换为std::function<int (void)>
. ExpInt
将是可转换的,所以如果你只是通过指针间接,那将起作用:
auto f = static_cast<std::function<int (void)>>(*e);
PS你泄漏了动态分配。避免使用拥有裸指针。
推荐阅读
- python - django 2 - 基于多个模型的嵌套查询
- php - 如何将同一帖子的数据组合在一起?
- oracle - 数据未插入到目标表
- angular - TypeScript 找不到名称 Weakmap、Map 等
- symfony - 在控制台中安装/使用控制器
- c# - 事件日志 API 缺少条目
- google-cloud-platform - GCP Dataflow Apache Beam 写入输出错误处理
- javascript - 确定要删除吗?
- twitter-bootstrap - 我如何使用 v-bind:class 来改变颜色的条件
- angular - 无法读取未定义的属性“下一个”。角。重命名错误