c++奇技淫巧

举报
C语言与CPP编程 发表于 2022/03/21 23:49:08 2022/03/21
【摘要】 1 C++ 写一个函数,用模板函数的特例化这个属性得到一个数组的长度。 #include <iostream>using namespace std; template <typename Type, size_t N>inline...

1 C++ 写一个函数,用模板函数的特例化这个属性得到一个数组的长度。


  
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <typename Type, size_t N>
  5. inline size_t GetArrayLength(const Type(&)[N])
  6. {
  7.     return N;
  8. }
  9.  
  10. void main()
  11. {
  12.     int a []= {,,};
  13.     cout << GetArrayLength(a) << endl;
  14.     system("pause");
  15. }

2 get/set自动生成

通过宏定义来实现


  
  1. #define ClassVar(permission, type, name, value, funcname)       \
  2.     public:                                                     \
  3.         void Set##funcname(type v_val) { name = v_val; }        \
  4.         type Get##funcname() const { return name; }             \
  5.     permission:                                                 \
  6.         type name = value;

使用例子:

ClassVar(privateint, cnt_, 0, Count)

 

生成


  
  1. public:
  2.     void SetCount(int v_val) { cnt_ = v_val; }
  3.     int GetCount() const return cnt_; }
  4. private:
  5.     int cnt_ = 0;

3 inline(内联)关键字


  
  1. inline int max(int a, int b)     
  2.     return a > b ? a : b                         
  3. }                                
  4.                                            
  5. int main()                                  
  6. {                                         
  7.     int a, b, c;                           
  8.     cin >> a >> b >> c;                   
  9.                                            
  10.     cout << max(a, b) << endl;  
  11.     return 0;                            
  12. }  

4 释放vector的存储空间

reverse的源代码,可以看到当reserve(0)时,并没有释放多余空间的逻辑


  
  1. template 
  2. void
  3. vector<_Tp, _Allocator>::reserve(size_type __n)
  4. {
  5.  if (__n > capacity())
  6.  {
  7.  allocator_type& __a = this->__alloc();
  8.  __split_buffer __v(__n, size(), __a);
  9.  __swap_out_circular_buffer(__v);
  10.  }
  11. }

5 宏自身迭代


  
  1. #define BOOST_PP_COMMA_IF(cond) BOOST_PP_IF(cond, BOOST_PP_COMMA, BOOST_PP_EMPTY)()
  2. #define BOOST_PP_IF(cond, t, f) BOOST_PP_IIF(BOOST_PP_BOOL(cond), t, f)
  3. #define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_I(bit, t, f)
  4. #define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_ ## bit(t, f)
  5. define BOOST_PP_IIF_0(t, f) f
  6. define BOOST_PP_IIF_1(t, f) t
  7. #define BOOST_PP_BOOL(x) BOOST_PP_BOOL_I(x)
  8. define BOOST_PP_BOOL_I(x) BOOST_PP_BOOL_ ## x
  9. define BOOST_PP_BOOL_0 0
  10. define BOOST_PP_BOOL_1 1
  11. define BOOST_PP_BOOL_2 1
  12. ... ...
  13. define BOOST_PP_BOOL_256 1

文章来源: blog.csdn.net,作者:程序员编程指南,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_41055260/article/details/123634038

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。