gpt4 book ai didi

c++ - 在模板中插入类型

转载 作者:行者123 更新时间:2023-11-28 06:40:39 25 4
gpt4 key购买 nike

我要定义模板

template<template<typename...> class TT, size_t n, class T, class... U>
struct insert;

插入类型 Tn 上-参数之间的第一个位置U...内部模板 TT .所以它应该以这样的方式工作,例如insert<std::tuple, 2, char, int,int,int,int>扩展为 std::tuple<int,int, char, int,int> ,即 char被插入到元组参数的中间。

执行如下

template<template<typename...> class TT, size_t n, class T, class U1, class... U>
struct insert<TT, n, T, U1, U...>
{
template<class...V>
using templ =
/* template<typename...> */
typename
insert
<
typename insert<TT, n - 1, T, U...>::templ,
0,
U1
>::templ < V... > ; // <-- error C2988: unrecognizable template
// declaration/definition

using type = typename templ < > ;
};

template<template<typename...> class TT, class T, class... U>
struct insert < TT, 0, T, U... >
{
template<class...V>
using templ = TT<T, U..., V...>;

using type = typename templ < > ;
};

但是编译失败。感谢您的帮助。

最佳答案

template<template<typename...> class TT, class T, size_t n, class... U>
struct insert;

template<template<typename...> class TT, class T, class U1, class... U>
struct insert <TT, T, 0, U1, U...>
{
using type = TT<T, U1, U...>;
};

template<template<typename...> class TT, class T>
struct insert <TT, T, 0>
{
using type = TT<T>;
};

template<template<typename...> class TT, class T, size_t n, class U1, class... U>
struct insert<TT, T, n, U1, U...>
{
template <typename... X> using templ = TT<U1, X...>;
using type = typename insert<templ, T, n-1, U...>::type;
};

测试:

template <typename t1, typename t2, typename t3, typename t4>
struct test {};

using result = insert<test, int, 2, double, char, void*>::type;

int main()
{
std::string s = typeid(result).name();
int status;
s = abi::__cxa_demangle(s.c_str(), NULL, NULL, &status);
std::cout << s << std::endl;
}

Demo .

关于c++ - 在模板中插入类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26036278/

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