C++限制模板模板中的内部类型

标签 c++ templates stl

C++ 有没有办法在嵌套模板中指定内部模板的类型?我想做的是

template<template <std::string> class StringContainer>
void function(const StringContainer& cont);

换句话说,我想要一个接受所有类型字符串容器的函数——vectordequelist、等等

基本上,我有四个问题:

  1. 有可能吗?
  2. 如果是这样,定义应该是什么样的(上面没有编译,但我没想到会)?
  3. 即使可能,是否有办法使其与标准容器一起使用,这些容器具有多个模板参数,甚至可能是特定于实现的?
  4. 如果不是容器,我至少可以期望迭代器只有一个模板参数吗?

谢谢!

最佳答案

#include <deque>
#include <list>
#include <iostream>
#include <vector>

// Removed:
// template < template<typename, typename ...> class Container, 
// typename T, typename ...Types>
// void function(const Container<T, Types...>&);

template < template<typename ...> class Container, typename ...Types>
void function(const Container<std::string, Types...>& container) {
    for(const std::string& s: container) {
        std::cout << s << " ";
    }
    std::cout << std::endl;
}

int main () {
    std::deque<std::string> d{ "Hello", "Deque" };
    function(d);
    std::list<std::string> l{ "Hello", "List" };
    function(l);
    std::vector<std::string> v{ "Hello", "Vector" };
    function(v);
    return 0;
}

关于C++限制模板模板中的内部类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18720652/

相关文章:

c++ - 检查某种类型是否是模板类 std::optional 的实例化

c++ - C++ 标准库是否有按插入顺序排序的集合?

c++ - STL 插入迭代器

c++ - 如何使用 Boost 库计算两个时间戳之间的时间差(以微秒为单位)

c++ - 添加元素 <string, pointer> 以 boost 无序 HashMap

c++ - 您可以在 C++ 中制作自定义运算符吗?

c++ - 如何使用 map 从 CPP 中带有 vector 的文件中获取唯一值?

c++ - 为什么我无法更改 `set<set<int>>` 循环中的值

c++ - 如何将 pcl::Histogram 保存为 PNG 或 JPG 文件?

c++ - 判断一个类型是否是类类型?