Meta Programming

【本文链接】

http://www.cnblogs.com/hellogiser/p/meta-programming.html

【分析】

Template Mataprogram,中文叫模板元编程。我之能听说它,并对它不甚向往,主要是因为它有这样几个特点:
1、它编的程序不是运行的时候执行的,而是在编译的时候由编译器执行的;
2、它能够牵着编译器的鼻子走,靠的完全是符合标准的模板语法,不需要使用编译器的任何API;
3、它居然是图灵完备的,也就是说它什么事都能干。

【递归demo】

C++ Code


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
#include <iostream>
using namespace std;

template< int n >
struct factorial
{
    enum { ret = factorial < n - 1 >::ret * n };
};

template<>
struct factorial< 0 >
{
    enum { ret = 1 };
};

int main()
{
    cout << "7! = " << factorial< 7 >::ret << endl; // 5040
    return 0;
}

【分支demo】

C++ Code


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
template <bool C, typename Ta, typename Tb>
class IfThenElse;

template <typename Ta, typename Tb>
class IfThenElse<true, Ta, Tb>
{
public:
    typedef Ta ResultT;
};

template <typename Ta, typename Tb>
class IfThenElse<false, Ta, Tb>
{
public:
    typedef Tb ResultT;
};

【参考】

http://www.cppblog.com/youxia/archive/2008/08/30/60443.html

http://stackoverflow.com/questions/112277/best-introduction-to-c-template-metaprogramming

时间: 2024-07-29 09:43:53

Meta Programming的相关文章

C# Meta Programming - Let Your Code Generate Code - Introduction of The Text Template Transformation Toolkit(T4)

<#@ template language="C#" #> <#@ output extension=".cs" #> <#@ assembly name="System.Core" #> <#@ import namespace="System.Linq" #> <# Type[] types_to_generate = new[] { typeof(object), t

C# Meta Programming - Let Your Code Generate Code - 利用反射重写自动的ToString()

我们在写一些Model的时候,经常会重写ToString,为了在控制台中进行打印或者更好的单元测试. 但是,如果Model的字段非常多的时候,如此简单的重复劳动经常会变成一件令人头痛的事情,因为大家 都不想重复劳动,或者这种事情应该交给初级程序员或者毕业生去做. 看如下: public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public int Age

初识C++模板元编程(Template Mega Programming)

前言:毕设时在开源库上做的程序,但是源码看得很晕(当时导师告诉我这是模板元编程,可以不用太在乎),最近自己造轮子时想学习STL的源码,但也是一样的感觉,大致了解他这么做要干什么,但是不知道里面的机制.于是开始学习<C++模板元编程>,看完第二章对一些东西豁然开朗. PS:该书也有点老了,C++11标准还没出来,主要用的Boost库. Traits(特征) 说正题,在STL中经常可以见到后缀为traits的名字,比如经常用到的std::string,本质是类模板basic_string的第一个参

Ruby探针的基本实现原理

李哲 - MAY 13, 2015 语言本身 Ruby语言支持语法级别的系统,框架,甚至语言本身的方法复写,一般叫做元编程(meta programming), 此基础之上还有一些术语为mixin,方法的动态定义,运行时类改写等等,这些技术和机制可以让语言本身就能实 现其他语言需要字节码才能实现的功能,例如探针需要hook HttpRequest中的request方法,就可以通过下面的方式实现: class HttpRequest def request_new puts 'before req

js-ES6学习笔记-Proxy

1.Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种"元编程"(meta programming),即对编程语言进行编程. 2.Proxy 可以理解成,在目标对象之前架设一层"拦截",外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写.Proxy 这个词的原意是代理,用在这里表示由它来"代理"某些操作,可以译为"代理器". 3.ES6 原生提供 Proxy

怎么样才算是精通 C++?

C++是一门很神奇的语言,让人又爱又恨. 在知乎上看到的一个帖子,怎么样才算是精通C++,这里节选一些精彩的回复. 链接:http://www.zhihu.com/question/20201972/answer/23454845 来源:知乎 1 精通C++是一个艰巨的任务.为什么C++比别的语言难学这么多?其实这基本上是因为C++他爹Bjarne Stroustrup说过的一句话"我特别讨厌语言的设计者把自己的喜好强加给用户"(看向go).结果C++为了不限制你的想法,于是也就变成了

C++ 我想这样用(六)

嗯,上一篇已经介绍了面向过程编程的语法知识,接下来是最后的也是最重要的一个部分: 这是本系列的最后一篇,先介绍两个描述: 描述一:C++有四个主流部分:better C,ADT,OO,和GP,以及发展中的functional, generative,meta programming等.Better C, 只增加函数重载.引用类型.缺省参数等简单特性的类C子集.ADT C++,整个程序由平面化的具体类(concrete class)对象构成,无继承,无多态. 描述二:“C++ 三人谈”中看到恶魔曾

1、Python基础知识

 以下内容摘自:http://www.cnblogs.com/happyframework/p/3255962.html Hello,大家好!在此感谢“博主”!的分享! 1 # coding=utf-8 2 3 print('Hello,大家好!在此感谢“博主”!的分享!') 乘方 1 print(2**3) 变量 var = 1 print(var) var = "叮当" print(var) 注:这里的var = xxxx不叫变量赋值,而叫变量绑定,python维护了一个符号表(变

【转】中间件的历史来看移动App开发的未来

今天是十一长假,自己整理了寝室,差点累死,现在才开电脑,随便逛逛博客,看到不错博文,转载一下.. 在移动开发领域我们发现一个很奇怪的现象:普通菜鸟新手经过3个月的培训就可以拿到 8K 甚至上万的工作:在北京稍微有点工作经验的 iOS 开发,就要求 2 万一个月的工资.不知道大家是否想过:移动应用开发已经在市场上火热了这么多年了,为什么很多公司还仍然会面临移动开发人才稀缺的问题呢?对于移动开发人才的增长速度总是赶不上市场需求发展的原因,我认为不应该简单归为市场供求关系的问题,其源动力还是来自移动应