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

标签 c++ visual-c++

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. 类(class)成员(失败)

(不知道有没有关系)

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

最佳答案

类(class)成员:

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 上运行良好。

关于C++ 用户自定义类型转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30273986/

相关文章:

c++ - static 关键字及其在 C++ 中的各种用途

C++重绘窗口的一部分

c++ - 调用 UpdateData(TRUE) 后 CString 值发生变化

c++ - VS2012:单元测试错误:Assert::AreEqual(object, object) 无效

c++ - Qt - 摆脱 .dll 文件丢失错误

c++ - 在 Python 中使用 Boost 图形库

c++ - 在 C++ 中初始化 vector 时获取错误消息

c++ - 有没有用 C++11 中基于范围的 for 循环替换 BOOST_FOREACH 的经验?

visual-studio - 创建 DLL,与 __declspec(dllexport) 混淆

c++ - 'new' 和 'delete' 在 C++ 中被弃用了吗?