美文网首页
C++11 模板元编程 - 元函数转发

C++11 模板元编程 - 元函数转发

作者: MagicBowen | 来源:发表于2016-09-16 10:44 被阅读378次

前面介绍了元函数转发的概念,也就是通过已有的元函数组合,来定义新的元函数。

如下我们实现一个元函数TypeSize用于求一个类型的size值:

template<typename T>
using TypeSize = __int(sizeof(T));

得益于__int()是个元函数,我们通过调用它实现了TypeSize。由于上述通过调用或者组合元函数来定义新的元函数的模式非常常用,为了简化一些临时场合下的定义方式,避免每次都要为形参起名字,所以TLP库中专门定义了一组宏,用来简化元函数转发的定义方式。

// "tlp/func/Forward.h"

#define __func_forward(Name, ...)       \
using Name = __VA_ARGS__

#define __func_forward_1(Name, ...)     \
template<typename _1> using Name = __VA_ARGS__

#define __func_forward_2(Name, ...)     \
template<typename _1, typename _2> using Name = __VA_ARGS__

#define __func_forward_3(Name, ...)     \
template<typename _1, typename _2, typename _3> using Name = __VA_ARGS__

#define __func_forward_4(Name, ...)     \
template<typename _1, typename _2, typename _3, typename _4> using Name = __VA_ARGS__

这组宏专门用来实现元函数转发,它默认为形参起好了从_1开始的名称。有了这组宏,TypeSize可以如下方式定义:

__func_forward_1(TypeSize, __int(sizeof(_1)));

我们前面实现过判断一个类型是否是另一个类型的父类的元函数__is_base_of(),我们用它实现一个新的元函数,用来在两个类型中选择出父类类型返回。

__func_forward_2(SupperOf, IfThenElse<__is_base_of(_1, _2), _1, _2>);

可以测试一下:

TEST("should_choose_the_base_type")
{
    struct Base{};
    struct Derived : Base{};

    ASSERT_EQ(typename SupperOf<Derived, Base>::Result, Base);
}

TypeList

返回 C++11模板元编程 - 目录

相关文章

  • C++11 模板元编程 - 元函数转发

    前面介绍了元函数转发的概念,也就是通过已有的元函数组合,来定义新的元函数。 如下我们实现一个元函数TypeSize...

  • C++11 模板元编程 - 元函数

    我们继续演进前面那个无聊的类型计算的例子,来得出元函数的定义。 前面我们实现了PointerOf,它对于传进的任意...

  • C++11 模板元编程 - 两阶段的C++语言

    前面我们介绍了C++模板元编程的基础知识。我们将模板元编程的计算对象统一到类型上,引入了元函数的概念。元函数是模板...

  • 模板元编程

    什么是模板元 模板元编程是一种编译期计算的编程方法。如果你学过任意一门函数式的编程语言,那么你对模板元编程的理解一...

  • C++11 模板元编程 - 元编程

    从本节开始我们将模板元编程当做一门独立的函数式语言来讨论它的方方面面。 所谓元编程,就是指可以产生程序的程序。由于...

  • C++11 模板元编程 - 高阶函数

    接着上面的例子,此刻我们想要定义指向指针的指针的指针的指针类型,怎么办?或者说我们想要一种能够任意指定指针层数的元...

  • C++11 模板元编程 - 基础类型和元函数

    前面已经介绍过了,TLP库中通过IntType和BoolType对int和bool值进行封装,并且提供了对应的计算...

  • C++11 模板元编程 - 模板元编程的应用

    本节开始我们通过使用C++模板元编程去解决一些实际问题,来展示模板元编程针对现实问题的使用方法和设计技巧。本节中的...

  • C++11 模板元编程 - 柯理函数

    现在,我们想实现一个元函数,可以返回char类型指定层数的指针类型。 如上,我们定义了元函数CharPointer...

  • 14/15

    约束模板友元 模板类的外边定义一个模板函数,在模板类中将模板函数具体化为模板类的友元函数 非约束模板友元 模板类中...

网友评论

      本文标题:C++11 模板元编程 - 元函数转发

      本文链接:https://www.haomeiwen.com/subject/mffiettx.html