败犬日报 2024-10-29
1. extern "C" 能导出一个类里面的函数么
https://zh.cppreference.com/w/cpp/language/language_linkage
当类成员,尾部带有 requires 子句的友元函数 (C++20 起)或非静态成员函数在 "C" 语言块中出现时,它的链接仍然是 "C++"(但形参的类型在存在时仍然是 "C")
看起来只涉及非静态成员函数,实测静态成员函数也是被 mangling 了:https://godbolt.org/z/nWzf8obne
扩展阅读 C++黑魔法:将纯C头文件关进命名空间的笼子 - 23Xor的文章 - 知乎
2. 反射呢,快端上来罢
cpp 因为没有反射,无数人造了无数相同的轮子了。
现在反射相关的提案非常多,C++26 非常有希望。
3. cpp 有没有 split(字符串分割)
split_view / lazy_split_view C++20
https://zh.cppreference.com/w/cpp/ranges/split_view
4. 有没有 static_warning
编译的时候报个警告,而不是 static_assert 那样直接 error 了。
正确做法是标 [[deprecated]]
,后面可以跟理由。
5. 第三方库头文件符号冲突了
如果简单地套一层命名空间,标准库就会出现在命名空间里(第三方库头文件 include 标准库),这会导致更多问题。除非能直接改第三方库。
可能的做法是加中间层,把第三方库封装一层,做好隐藏。
比如项目里面有两个模块,依赖同一个库的不同版本。理想做法是各个模块各自用这个库,并把这个库的符号都藏起来,不对外暴露,这样就没有冲突问题了。但是静态链接想要做到这个不是很容易。
6. SCARY iterators / metafunctions
减少模板编译时间的 trick。
https://quuxplusone.github.io/blog/2018/07/09/scary-metafunctions/