C ++构造函数:使用this_class(gcc vs visualc)

时间:2016-12-09 22:17:31

标签: c++ gcc constructor typedef

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中失败。 我怀疑它可能不是100%C ++,即使使用c ++ 11,c ++ 14或c ++ 17开关。

但是拥有this_class typedef非常有用,因为它允许通过简单地调整

来更改类的名称

使用this_class = new_class_name

无需在类定义中更改所有类名称。

当我从visual c ++移植代码时,是否有gcc和clang中的开关允许我继续使用这个有用的语句(在visual c中允许)?

注意:这与前一个问题不同:'我可以在C ++中实现自治self成员类型吗? '因为我想知道clang和gcc中是否有开关允许在visual c ++中允许上述语句。我对其他问题中的复杂hacks节目不感兴趣,只是对编译器之间的兼容性切换

2 个答案:

答案 0 :(得分:1)

我违反了一项神圣的宗旨,但你可以用一个简单的宏来做到这一点。

c = c.substr(0, e) + '<span class="yup">NOT</span>' + c.substr(e)';
$("div.example").html(c);

答案 1 :(得分:1)

结论

1)gcc和clang中没有标志来模仿关于内部类名别名的可视化c ++行为

2)转换非常费力,并且使用this_class需要至少2行所有类的代码

3)StoryTeller有一种工作方式,但可能会产生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,以提高简洁性和可移植性。由于我不知道在哪里以及如何提出这个问题,如果有人知道这样做是为了阅读我会很感激,如果他们可以提交,如果可能的话