我定义下面的功能模板,但我遇到了一些问题。请帮帮我。谢谢!
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);
答案 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);