C++模板元编程的两个例子

    C++模板元编程,是使用template进行编译期运算的一种机制,可以认为是C++的一种编程方式。


第一个例子:计算整数N的阶乘。

//模板的一般形式
template
class Factorial
{
public:
    enum
    {
        _result = N * Factorial::_result
    };
};

//用于结束递归规则的特化模板
template<>
class Factorial<0>
{
public:
    enum
    {
        _result = 1
    };
};

int main()
{
    const int Num = 10;
    cout << Num << "! = " << Factorial::_result << endl;
}

运行结果:10! = 3628800

其中的思考方式,我感觉是数学归纳法的应用。注意模板在其中起的作用,在编译期,编译器使用template生成了class Factorial<0>……class Factorial<10>一共11个class定义,在程序运行时其实计算过程并没有占用CPU时间,只不过这么多class的定义占用了一些内存。


第二个例子:编译期的if语句

这是 Bjarne Stroustrup在《Evolving a language in and for the real world C++ 1991-2006》一文中举的例子。

struct T_Left
{
    int value;
};
struct T_Right
{
    char value;
};

template
struct if_
{
    typedef X type; // use X if b is true
};
template
struct if_
{
    typedef Y type; // use Y if b is false
};


int main()
{
    cout << "Type Size = " << sizeof(if_::type) << endl;
}
其实也是根据编译期能确定的值,来进行编译期的选择。

模板元编程的应用包括:Blitz++库;boost::mpl库;以及《Modern C++ Design》一书中提到的typelist。


你可能感兴趣的:(C++模板)