Nic*_*lli 5 c++ metaprogramming c++11
假设您有一个元组,并希望通过对第一个类型的每种类型应用元函数来生成新元组.什么是最有效的C++元功能来完成这项任务?是否也可以使用C++ 0x可变参数模板来提供更好的实现?
怎么回事这个:
template<typename Metafun, typename Tuple>
struct mod;
// using a meta-function class
template<typename Metafun, template<typename...> class Tuple, typename ...Types>
struct mod<Metafun, Tuple<Types...>> {
typedef Tuple<typename Metafun::template apply<Types>::type...>
type;
};
Run Code Online (Sandbox Code Playgroud)
然后
typedef std::tuple<int, bool> tuple_foo;
struct add_pointer {
template<typename T>
struct apply { typedef T *type; };
};
typedef mod<add_pointer, tuple_foo>::type tuple_ptrfoo;
Run Code Online (Sandbox Code Playgroud)
那是通过将一个元函数类包装apply到一个非模板中来实现的.这允许将它传递给C++ 03模板(通过简单的操作就不能接受具有任意参数的模板template<typename...> class X).当然,您也可以接受纯元函数(不是类)
template<template<typename...> class Metafun, typename Tuple>
struct mod;
// using a meta-function
template<template<typename...> class Metafun, template<typename...> class Tuple,
typename ...Types>
struct mod<Metafun, Tuple<Types...>> {
typedef Tuple<typename Metafun<Types>::type...>
type;
};
Run Code Online (Sandbox Code Playgroud)
并使用std::add_pointer模板
typedef mod<std::add_pointer, tuple_foo>::type tuple_ptrfoo;
Run Code Online (Sandbox Code Playgroud)
或者您可以将其包装到类中,以便与第一个版本兼容
// transforming a meta function into a meta function class
template<template<typename...> class Metafun>
struct ToClass {
template<typename ... T>
struct apply { typedef Metafun<T...> type; };
};
typedef mod<ToClass<std::add_pointer>, tuple_foo>::type tuple_ptrfoo;
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
549 次 |
| 最近记录: |