提问人:nmd_07 提问时间:11/24/2018 最后编辑:songyuanyaonmd_07 更新时间:11/25/2018 访问量:32
专用结构/类中无法识别的数据成员
Not Recognized Data Members in Specialized Structs/Classes
问:
为了包含条件数据成员,我使用专用模板而不是命名空间,然后在每个专用化中重载赋值运算符。在编译过程中,无法识别专用化的成员变量。我不明白为什么,在互联网上也找不到任何东西。
enum Def : int {A, B};
template<Def T>
struct X {};
// Forward declaration does not help, like it would in non-template implementations.
/*
* template<>
* struct X<B>;
*/
template<>
struct X<A>
{
int a;
int b;
X<A> & operator = (const X<B> & obj)
{
a = obj.a;
b = obj.b;
}
}
template<>
struct X<B>
{
int a;
int b;
int c;
int d;
X<B> & operator = (const X<A> & obj)
{
a = obj.a;
b = obj.b;
}
}
现在发生的事情是,在编译时,我得到没有成员命名和的错误。这里有什么问题?X<B>
a
b
答:
2赞
songyuanyao
11/24/2018
#1
问题是,当在专用化的定义中实例化时(这是 的定义所要求的),专用化的定义还不可见。这意味着它将从主模板隐式实例化,该模板没有 member 和 。X<B>
X<A>
X<A>::operator =
X<B>
a
b
您可以将 的定义移出专业化的定义,并在专业化定义之后移动 。例如:X<A>::operator =
X<A>
X<B>
template<>
class X<A>
{
int a;
int b;
X<A> & operator = (const X<B> & obj);
};
template<>
class X<B>
{
...
};
X<A> & X<A>::operator = (const X<B> & obj)
{
a = obj.a;
b = obj.b;
}
评论
0赞
nmd_07
11/24/2018
谢谢,这很好地解释了这一点。
上一个:模板类赋值运算符
评论