[英]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_data
是B<int>
并且bar.m_data
是int
,并且您没有为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.