当前位置: 首页 > 知识库问答 >
问题:

从模板化模板类和可变模板中声明“容器”对象

颛孙高义
2023-03-14

我需要声明一个可以存储不同类型容器的类。也就是说,如果它能处理STD::Bitset和STD::Array就好了。但是,这两个类需要不同的模板参数······是否可能(以及如何)使用模板化模板类和可变模板来声明此类类?

示例(但错误):

template<template <typename..., std::size_t> class Container,
         std::size_t N,
         typename... Args>
class Base_Class
{
    ...
    Container<Args..., N/2> container;
};
template<typename... Args, typename T>
struct A
{};

共有1个答案

徐奇逸
2023-03-14

安东的回答可以通过使用模板模板参数来指定resizedcontainer的指定,使容器的特定性有所降低:

namespace detail {
    template<typename Container>
    struct ResizedContainer;

    template<template<typename,std::size_t> class Container,
             typename T, std::size_t N>
    struct ResizedContainer<Container<T,N>> {
        using type = Container<T,N/2>;
    };

    template<template<std::size_t> class Container,
             std::size_t N>
    struct ResizedContainer<Container<N>> {
        using type = Container<N/2>;
    };
}

#include <array>
#include <bitset>

template<typename Container>
class Base_Class {
    typename detail::ResizedContainer<Container>::type container;
};

int main() {
    Base_Class<std::array<int,4>> a;
    Base_Class<std::bitset<5>> b;
}
 类似资料:
  • 关于下一个代码,我有一些问题: > 类专业化

  • 我有一个类模板和一个函数模板定义了一个,它引用要绑定到的模板类型。 我想要的是将< code>make_obj函数声明为< code>friend,这样它可以创建< code>Obj的,但是其他人不能(除了通过copy ctor)。 我尝试了几个朋友声明,包括 和 后者是使< code>make_obj的所有模板实例化成为< code>Obj类的朋友的不太理想的尝试。然而,在这两种情况下,我得到相

  • 在C++11之前,类模板和函数模板只能含有固定数量的模板参数。C++11增强了模板功能,允许模板定义中包含0到任意个模板参数,这就是可变参数模板。可变参数模板的加入使得C++11的功能变得更加强大,而由此也带来了许多神奇的用法。 可变参数模板 可变参数模板和普通模板的语义是一样的,只是写法上稍有区别,声明可变参数模板时需要在typename或class后面带上省略号...: template<ty

  • 关于我的问题 我有一个模板类,如下所示: 所以简而言之,我想要的是:1。在类外部的容器类型上编写泛型函数模板。2.类中函数的原型是什么? 请建议

  • 还尝试在专门化的中进行模板方法专门化: 这一次它编译,但调用原始方法,即 解决方案

  • 这是我在玩变量模板时遇到的一个问题。我有一些代码,使用专业化来计算参数包中的“有趣”类型,就像这样: 这段代码工作正常,但是如果我想使用相同的方法来计算类模板,我会遇到问题: 上面的代码编译失败,错误是"预期的类型,得到了'向量'"开始的行"结构计数"。我也无法更简单的东西,所有的类模板接受一个参数: 这段代码也无法编译,再次在以“结构计数”开头的行中抱怨“预期的类型,得到了‘_First’”。有