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节目不感兴趣,只是对编译器之间的兼容性切换
答案 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,以提高简洁性和可移植性。由于我不知道在哪里以及如何提出这个问题,如果有人知道这样做是为了阅读我会很感激,如果他们可以提交,如果可能的话