C 构造函数:使用this_class(GCC vs Visualc)
C++ constructor: using this_class (gcc vs visualc)
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,以提高简洁性和便携性。由于我不知道在哪里以及如何提出建议,如果确实知道这样做的人正在阅读,我将不胜感激,如果他们可以在可能的情况下提交
相关文章:
- 数据成员SFINAE的C++17测试:gcc vs clang
- CRTP 中的复制赋值运算符 - gcc vs clang 和 msvc
- 命名空间范围内的外部 - GCC vs clang vs msvc
- C++正则表达式失败(GCC vs Microsoft 编译器)
- 使用函数参数作为常量表达式的一部分 - gcc vs clang
- `noexcept`函数中的std :: terminate`调用函数有限-GCC vs clang codegen
- variadic模板代码中的GCC VS MSVC编译误差
- GCC vs CLANG:除了静态强制转换时在未使用的模板专用化中解析外,否
- GCC vs CLANG:将捕获的参数包扩展两次
- GCC vs Clang 中的堆栈粉碎(可能是由于金丝雀)
- "Nested" 带括号的类模板参数推导:GCC vs. clang
- C 构造函数:使用this_class(GCC vs Visualc)
- GCC vs Clang:将功能与-FPIC一起插入
- Glibc vs GCC vs binutils compatibility
- 模板编译:gcc vs VS2010
- GCC vs. Clang:"invalid use of incomplete type" std::d eclval 和模板专业化
- 默认参数,gcc vs clang
- Clang vs GCC vs MSVC模板转换操作符-哪个编译器是正确的
- GCC vs clang -使用' make_overload '可变lambda继承时的模糊重载
- Clang vs. GCC vs. MSVC中的SFINAE和可见性检查——这是正确的