繁体   English   中英

C ++用户定义的类型转换失败

[英]C++ User-defined type conversion failure

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. 类的静态成员(成功);

  2. 班级成员(失败)

(我不知道这是否重要)

我真的很想知道为什么它会以两种方式执行,更重要的是,我如何将其作为非静态成员放入我的班级并成功调用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;
}

这在VS 2013 EE上运行良好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM