首页 > 解决方案 > 显式转换为 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);
                                                   ^

标签: c++castingstd-functionexplicit-conversion

解决方案


编译器告诉你出了什么问题:

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你泄漏了动态分配。避免使用拥有裸指针。


推荐阅读