visual c++用户定义类型转换失败

visual C++ User-defined type conversion failure

本文关键字:类型转换 失败 定义 用户 c++ visual      更新时间:2023-10-16
template<typename T>
class Pack
{
private:
    std::function<T()> _Func = nullptr;
public:
    Pack()
    {
    }
    Pack(std::function<T()> func)
        : _Func(func)
    {
    }
    ~Pack()
    {
    }
    operator T()
    {
        return _Func();
    }
};

我用的是operator T,我想隐式地调用_Func,但我甚至不能显式地这样做。这似乎是正确的,但实际上错误C2440 @MSVC。我有两种用法:

  1. 类的静态成员(succeeded);

  2. 类成员(failed)

(我不知道这是否重要)

我真的很想知道为什么它以两种方式执行,更重要的是,我如何将它作为非静态成员放入我的类中并成功调用operator T

类成员:

struct test
{
    test()
    {
        p_ = Pack<int>(std::bind(&test::foo, *this));
    }
    int foo()
    {
        std::cout << "test::foo" << std::endl;
        return 5;
    }
    Pack<int> p_;
};
int main()
{
    test t;
    int x = t.p_;
    return 0;
}