gpt4 book ai didi

c++ - 模板 : How to return container of container

转载 作者:行者123 更新时间:2023-11-30 01:55:09 27 4
gpt4 key购买 nike

我会模板化一个函数,以便将它与 vector、set 或任何其他 STL 容器(具有正确的 API...)一起使用

我的函数当前原型(prototype)是:

vector<vector<int>> f ( const vector<int> & v, int size ) {...}

我尝试了不同类型的声明,如下所示:

template<template<typename U, typename Alloc> class C, typename T>
C<C<T, Alloc>, Alloc> f (const C<T, Alloc>& v, int size)
{...}

但我找不到正确的写法。你能帮帮我吗?

最佳答案

尝试

template<template<typename...> class C1, template<typename...> class C2, typename T, typename... Args>
C1<C2<T, Args...>> f (const C2<T, Args...>& v, int size)
{...}

允许不同的容器或

template<template<typename...> class C, typename T, typename... Args>
C<C<T, Args...>> f (const C<T, Args...>& v, int size)
{...}

如果内部容器和外部容器需要相同或者可能只是:

template<template<typename...> class C, typename T>
C<T> f (const T& v, int size)

并访问 T::value_type 而不是上面第一个示例中的 T

很难给出更好的建议,因为您的问题中的用例不清楚。


更新:解释为什么你的尝试没有成功:

template<template<typename U, typename Alloc> class C, typename T>
C<C<T, Alloc>, Alloc> f (const C<T, Alloc>& v, int size)
{...}

再看一遍:首先你需要 Alloc 作为另一个参数,因为模板模板参数中的参数名称不能用于任何用途。这将导致:

template<template<typename T_dummy, typename A_dummy> class C, typename T, typename Alloc>
C<C<T, Alloc>, Alloc> f (const C<T, Alloc>& v, int size)
{...}

好多了,但是现在你遇到了一个真正的问题:内部容器的分配器类似于

std::allocator<int>

适用于内容器,但不适用于需要符合以下要求的外部容器

std::allocator<std::vector<int>>

因此,为外部容器重新使用内部分配器的尝试注定要失败。

关于c++ - 模板 : How to return container of container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20959621/

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