繁体   English   中英

从抽象数据类型转换为泛型类型

[英]Converting from abstract data type to generic type

我试图弄清楚如何从抽象模板 class 转换为通用数据类型,如下所示。 具体来说, A::m_data将保存 class B<T>作为数据类型。 最终,我希望能够将A::m_data转换为B::m_data所持有的任何数据类型。 在这种情况下,到 integer。

目前,我在第 28 行收到错误:

二进制“=”:未找到采用“int”类型右侧操作数的运算符(或没有可接受的转换)。

template <typename T>
class B;

template <typename T>
class A
{
public:
    T m_data;

    operator A<B<T>>()
    {
        return T(m_data);
    }
};

template <typename T>
class B
{
public:
    T m_data;
};

int main()
{
    A <B<int>> foo;
    B<int> bar;
    bar.m_data = 10;

    foo.m_data = bar.m_data;

    return 0;
}

错误是因为foo.m_dataB<int>并且bar.m_dataint ,并且您没有为B定义将T作为输入的operator= ,例如:

template <typename T>
class B
{
public:
    T m_data;

    B& operator=(const T &value) {
        m_data = value;
        return *this;
    }
};

现场演示

目前还不清楚您的A::operator()试图返回什么。 但是由于您说您希望A::m_data最终与B::m_data具有相同的类型,因此您可以使用decltype() ,例如:

template <typename T>
class A
{
public:
    using data_type = decltype(T::m_data);

    data_type m_data;

    operator data_type()
    {
        return m_data;
    }
};

现场演示

暂无
暂无

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

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