专用结构/类中未识别的数据成员
Posted
技术标签:
【中文标题】专用结构/类中未识别的数据成员【英文标题】:Not Recognized Data Members in Specialized Structs/Classes 【发布时间】:2019-04-26 20:01:43 【问题描述】:为了包含条件数据成员,我使用专门的模板而不是命名空间,然后在每个专门化中重载赋值运算符。发生的情况是在编译期间,不识别特化的成员变量。我不明白为什么,在网上也找不到任何东西。
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
的成员的错误。这里有什么问题?
【问题讨论】:
【参考方案1】:问题是,当X<B>
在特化X<A>
的定义中被实例化时(这是X<A>::operator =
的定义所要求的),特化X<B>
的定义还不可见。这意味着它将是主模板中的implicitly instantiated,它没有成员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;
【讨论】:
谢谢,这解释得很好。以上是关于专用结构/类中未识别的数据成员的主要内容,如果未能解决你的问题,请参考以下文章
VMware Virtual Ethernet Adapter for VMnet1和和VMnet8 显示未识别的网络,如何解决?