C 构造函数:使用this_class(GCC vs Visualc)

C++ constructor: using this_class (gcc vs visualc)

本文关键字:GCC vs Visualc class 构造函数 使用 this      更新时间:2023-10-16
struct mystruct
{
    using this_class = mystruct; 
    /* 
       old typedef such as: 
       typedef struct mystruct  this_class; 
       also does not work 
    */
    this_class(){}
};

此代码在Visual C 中效果很好,但在GCC或Clang中失败。我怀疑即使使用C 11,C 14或C 17开关也可能不是100%C 。

,拥有this_class Typedef非常有用,因为它可以通过简单地调整

来更改类的名称

使用this_class = new_class_name

无需更改类定义中类名称的所有出现。

GCC和Clang中是否有一个开关,可以让我继续使用此有用的语句(在Visual C中允许)当我从Visual C 移植代码时?

注意:这与以前的问题不同:'我可以在C 中实现自主self成员类型吗?``我想知道Clang和GCC中是否有开关,以允许上述语句在Visual C 中允许。我对另一个问题中复杂的黑客节目不感兴趣,只是在编译器之间的兼容性切换

之间

我会违反圣训,但是您可以用简单的宏来做到这一点。

#define THIS_CLASS mystruct
struct THIS_CLASS {
  THIS_CLASS (){}
};
#undef mystruct

结论

1)在GCC和Clang中没有标志来模仿有关内部类名称别名的视觉C 行为

2)因此,转换是费力的,使用This_Class

至少需要2行代码

3)讲故事的人有一个工作方式,但可能会在IDE和可读性方面造成困难

4)一种更好的方法是将#Define宏放入班级,但这同样繁琐:

struct class_name{
#define this_class class_name;
this_class(){}
/* other member functions here using this_class */
#undef this_class
};

5)理想情况下,应为下一个C 标准提出本机this_class,以提高简洁性和便携性。由于我不知道在哪里以及如何提出建议,如果确实知道这样做的人正在阅读,我将不胜感激,如果他们可以在可能的情况下提交