gpt4 book ai didi

c++ - 从具有相同容器类型但不同 value_type 的容器生成新类型

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:59 26 4
gpt4 key购买 nike

给定一个容器,例如 std::list<T>std::vector<T>,我想在我事先不知道容器(std::list<NewT>std::vector<NewT>)的情况下分别生成一个新类型 std::liststd::vector

我当前的(但 failing )尝试如下所示:

#include <list>
#include <vector>

template<class Cont, class NewT> struct SameContNewT : public std::false_type
{};

template<class T, class Alloc, class NewT>
struct SameContNewT<std::list<T, Alloc>, NewT>
{ typedef typename std::list<NewT> type; };

template<class T, class Alloc, class NewT>
struct SameContNewT<std::vector<T, Alloc>, NewT>
{ typedef typename std::vector<NewT> type; };

int main()
{
typedef std::list<int> IntList;
typedef std::list<float> FloatList;
typedef SameContNewT<IntList, float> FloatListToo;
static_assert(std::is_same<FloatListToo, FloatList>::value, "No.");
}

如何才能实现预期的行为?

最佳答案

一些模板模板参数稍后摆弄......

template <class T, class NewP>
struct SameContNewT;

template <template <class...> class T, class... TPs, class NewP>
struct SameContNewT<T<TPs...>, NewP> {
using type = T<NewP>;
};

Live on Coliru

这确实丢弃了原始类型的所有模板参数,例如标准容器的分配器。这些需要更多的参与,因为你不能重用 T的分配器,很可能是 std::allocator<typename T::value_type>并且不适合分配 NewT的。

关于c++ - 从具有相同容器类型但不同 value_type 的容器生成新类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33828172/

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