gpt4 book ai didi

c++ - 处理模板列表的元函数

转载 作者:行者123 更新时间:2023-11-28 04:52:53 26 4
gpt4 key购买 nike

有问题Meta-Function to get the first template of a list of templates @vittorio-romeo 给出了编写元函数以获取模板列表的第一个模板的答案。现在我想编写一个接受模板(作为元函数)和要处理的模板列表的元函数:

template<template<typename> typename F, 
template<template<typename> typename...> typename TL> struct transform_T;
template<template<typename> typename F,
template<template<typename> typename...> typename TL,
template<typename> typename... I>
struct transform_T<F, TL<I...>> {
};

但是这个定义不能编译:https://wandbox.org/permlink/CnY2DOGbAqW4Evq4

编辑:通过下面的更改,它可以工作。这是一个完整的例子:

#include <cstdint>
#include <cstddef>

template<typename... T>
struct List {};

template<template<typename> typename... TT>
struct TList {};

template<template<template<typename> typename> typename F,
typename TL> struct transform_T;
template<template<template<typename> typename> typename F,
template<template<typename> typename...> typename TL,
template<typename> typename... I>
struct transform_T<F, TL<I...>> {
typedef List<typename F<I>::type...> type;
};

template<typename>
struct A {};
template<typename>
struct B {};

using l1 = TList<A, B>;

template<template<typename> typename X>
struct F {
typedef X<int> type;
};

using l2 = typename transform_T<F, l1>::type;

l2::_; // List<A<int>, B<int>>

int main() {
}

我的问题仍然存在,我是否必须在/primary/模板中只写 typename TL

最佳答案

您的主要模板定义应与特化参数相匹配:

template<template<typename> typename F1,typename TL> struct transform_T;

这是否是您真正想要的取决于您想要执行的“处理”类型。

My question ist still, we do I have to write only typename TL in the /primary/ template?

主模板声明给定模板名称的模板参数,也就是说,它告诉编译器某个名称是一个模板,它的参数是您指定的类型(类型、非类型、模板模板参数。 ..)。

部分特化声明了一组新的模板参数,通过类型推导与主要参数相匹配;显然,它们的种类必须匹配。

在您的原始代码中,您将传递 TL<I...> (这是一个类型)到模板模板类型的参数(template<template<typename> typename...> typename TL)。

关于c++ - 处理模板列表的元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47788068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com