gpt4 book ai didi

c++ - 具有模板模板参数的模板定义,可以专门化为类,例如,std::vector 或 std::map

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:47 27 4
gpt4 key购买 nike

我想创建一个模板类,可以容纳容器和容器的任意组合。例如,std::vector<std::string>std::map<std::tree> ,例如。

我尝试了很多组合,但我必须承认模板的复杂性让我不知所措。我编译的关闭是这样的:

template <class Vector, template <typename, class Containee = std::string> class Container>
class GenericContainer
{
Container<Containee> mLemario;
};

虽然它编译到目前为止,然后,当我想实例化它时,我会收到很多错误。

MyContainer<std::vector, std::string> myContainer;

我是否使用了正确的方法来创建那种类?

最佳答案

对于 std::vector(以及类似的)@ songyuanyao提供了一个很好的答案。但由于您还提到了 std::map,我将添加一个简单的扩展 @ songyuanyao的答案,online .

#include <iostream>
#include <vector>
#include <string>
#include <map>

template <template <typename...> class Container, typename Containee = std::string, typename... extras>
class GenericContainer
{
Container<Containee, extras ...> mLemario;
// Use 'Containee' here (if needed) like sizeof(Containee)
// or have another member variable like: Containee& my_ref.
};

int main()
{
GenericContainer<std::vector, std::string> myContainer1;
GenericContainer<std::vector, std::string, std::allocator<std::string>> myContainer2; // Explicitly using std::allocator<std::string>
GenericContainer<std::map, std::string, int> myContainer3; // Map: Key = std::string, Value = int
}

关于c++ - 具有模板模板参数的模板定义,可以专门化为类,例如,std::vector<std::string> 或 std::map<std::tree>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45811378/

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