显式转换为 std::function
explicit conversion to std::function
我正在尝试定义从某些 class 到 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);
P.S。你泄露了动态分配。避免使用拥有裸指针。
我正在尝试定义从某些 class 到 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);
P.S。你泄露了动态分配。避免使用拥有裸指针。