zoukankan      html  css  js  c++  java
  • enum hack

       看《Effective C++》的过程中,涉及enum hack,尤其是在条款48(认识template元编程)中。
        TMP(Template metaprogramming,模板元编程)起手程序:编译期计算阶乘。
     1  #include <iostream>
     2 //计算阶乘:TMP通过“递归模板具现化”实现循环
     3 //template和其特化版本、递归具现化和enum hack以及键入Factorial<n-1>::value
     4 //每个Factorial template具现体都是一个struct,每个struct都使用enum hack声明一个名为value的TMP变量,
     5 //value用来保存当前计算所得的阶乘值。
     6 
     7 template<unsigned n>
     8 struct Factorial
     9 {
    10  enum {value = n * Factorial<n-1>::value};
    11 };
    12 
    13 template<>
    14 struct Factorial<0>
    15 {
    16  enum {value = 1};
    17 };
    18 
    19 
    20 int _tmain(int argc, _TCHAR* argv[])
    21 {
    22  std::cout<<Factorial<5>::value<<std::endl;
    23  std::cout<<Factorial<10>::value;
    24 
    25  return 0;
    26 }

        enum hack使用优势(Effective C++条款03):

        (1)enum hack的行为某方面比较像#define而不像const,如对enum取址不合法;enum和#define一样绝不会导致非必要的内存分配;
        (2)实用主义。enum hack是模板元编程的基础技术。
     
        关于enum hack:
        在类里的enum里的常量在累的成员函数里可以直接作为整数调用,在类外可以用类名::变量名以及对象.变量名的方式来调用。应该是因为在类里面不能给某变量声明的同时给出初始值的吧,而用enum的方式可以巧妙地为类的实现里添加一些常量将所有权限定为此类。
     
  • 相关阅读:
    Hdoj 3697 Selecting courses 【贪心】
    nginx 反向代理
    嵌入式交叉编译环境搭建
    OpenWrt编译
    OpenWrt for vmware 从openwrt.org下载10.03.1 或是自己下载最新的源码进行编译生成x86 vmdk格式
    ubuntu centos debina
    openWRT
    C++ classics
    tomcat配置访问日志,访问首页主目录
    apache http配置https
  • 原文地址:https://www.cnblogs.com/dreamrun/p/4106288.html
Copyright © 2011-2022 走看看