模板类作为Stl容器参数

Aleks96

我想使用任何STL容器,例如std::vector使用自己的模板类型OptionParams

如果我用空的main函数编译我的代码-一切正常,但是如果我想在容器中打印模板类的任何字段,则会出错。我不确定,这可能在Stl容器模板类中使用。

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

template <typename T>
struct OptionParams {
    OptionParams(int level, int name, bool is_flag, T value) : level_(level), 
            name_(name), is_flag_(is_flag), value_(value) {}
    int level_;
    int name_;
    bool is_flag_;
    T value_;
};

template <typename T>
std::vector<OptionParams<T>> Options = {
    {OptionParams<int>(1, 2, 0, 3)},
    {OptionParams<std::string>(1, 2, 1, "hello")}
};

int main() {
    std::cout << Options<int>[0].level_ << std::endl;
}
map2.cpp: In instantiation of ‘std::vector<OptionParams<int>, std::allocator<OptionParams<int> > > Options<int>’:
map2.cpp:23:16:   required from here
map2.cpp:17:30: error: could not convert ‘{{OptionParams<int>(1, 2, 0, 3)}, {OptionParams<std::__cxx11::basic_string<char> >(1, 2, 1, std::__cxx11::basic_string<char>(((const char*)"hello"), std::allocator<char>()))}}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<OptionParams<int>, std::allocator<OptionParams<int> > >’
 std::vector<OptionParams<T>> Options = {
                              ^~~~~~~
昆汀

Options是一个变量模板,您可以使用单个参数T进行实例化以获取变量。使用Options<int>in进行操作时main,您将得到一个只能存储s而不std::vector<OptionParams<int>>可以存储的a 由于不同s之间无法进行转换,因此会出现错误。OptionParams<int>OptionParams<std::string>OptionParam<T>

如果要将异类对象存储在中std::vector,则需要某种类型的擦除。例如,具有OptionParams<T>从通用基类继承的所有特殊化,并将std::unique_ptrs存储到该基类。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

STL容器作为模板参数

来自分类Dev

MSVC:STL容器中的“使用类模板需要模板参数列表”

来自分类Dev

模板类作为模板参数

来自分类Dev

包含某些对象的STL容器模板参数

来自分类Dev

模板类作为模板参数默认参数

来自分类Dev

模板类作为模板类参数

来自分类Dev

模板类作为模板类参数

来自分类Dev

没有模板参数的模板类的容器

来自分类Dev

没有模板参数的模板类的容器

来自分类Dev

嵌套类作为模板参数

来自分类Dev

模板作为类中的参数

来自分类Dev

模板作为类中的参数

来自分类Dev

使用模板类作为模板参数

来自分类Dev

特性类作为模板模板参数

来自分类Dev

如何基于作为STL容器的模板参数模拟所选成员函数的部分专业化?

来自分类Dev

将STL容器扩展为可变参数模板

来自分类Dev

模板化函数中STL容器的默认参数

来自分类Dev

用于确定STL容器的模板参数上的std :: enable_if

来自分类Dev

完美地将STL容器转发到模板类

来自分类Dev

返回给定迭代器作为参数的适当类型的STL容器

来自分类Dev

嵌套类型作为基类的模板参数

来自分类Dev

std :: array作为类的模板参数

来自分类Dev

如何使用类的类型作为模板的参数

来自分类Dev

C ++枚举类作为变量模板参数

来自分类Dev

C ++-使用基类作为模板参数

来自分类Dev

使用自身作为参数的模板类。C ++

来自分类Dev

以子类作为模板参数继承类

来自分类Dev

std :: array作为类的模板参数

来自分类Dev

可变参数模板类参数容器实例化