如何在功能模板中获得不同类型

时间:2014-03-21 06:48:15

标签: c++ templates

我定义下面的功能模板,但我遇到了一些问题。请帮帮我。谢谢!

template <typename T>
void Insert(CMyObj obj_, std::vector<T>& vec_)
{
    if(T is bool type)
        vec_.push_back(obj_.AsBool());
    if(T is string type)
        vec_.push_back(obj_.AsString());
}

我可以调用函数模板,如何实现我的Insert()。

CMyObj  obj;
std::vector<bool> vec1;
Insert<bool>(obj, vec1);

std::vector<string> vec2;
Insert<string>(obj, vec2);

2 个答案:

答案 0 :(得分:2)

首先,如果模板参数可以从参数推导出来(在这种情况下它可以),你只需通过&#34;插入(obj,vec1)&#34;来调用它:如果vec1是{ {1}},T将是bool等......

其次,我将定义第二个函数模板,特别是从类似变体的CMyObj中提取类型值:

std::vector<bool>

然后,您可以将Insert实现为:

<bool

如果您尝试将其插入到具有GetValue尚未专门化的值类型的向量中,则无法进行编译。这就是你想要的。

答案 1 :(得分:0)

不知道您面临的错误是什么,但您可以更改以下代码: -

template <typename T>
void Insert(T obj_, std::vector<T>& vec_)
{
        vec_.push_back(obj_);
}




CMyObj  obj;
std::vector<bool> vec1;
Insert<bool>(obj.AsBool(), vec1);

std::vector<string> vec2;
Insert<string>(obj.AsString(), vec2);