我有一个模板函数,我希望返回T或变体的类型。我试图做如下,然而编译器抱怨它不能将'variant'转换为int(我用T = int使用这个函数)。返回特定类型的模板
我该如何实现这个功能,以便我可以返回变体或类型中包含的变体。
它是从一个向量结构中获得的。
template <typename T>
T find_attribute(const std::string& attribute, bool isVariant = false)
{
std::vector<boost::shared_ptr<node> >::iterator nodes_iter = _request->begin();
for (; nodes_iter != _request->end(); nodes_iter++)
{
size_t sz = (*nodes_iter)->attributes.size();
std::vector<node::attrib>::iterator att_iter = (*nodes_iter)->attributes.begin();
for (; att_iter != (*nodes_iter)->attributes.end(); att_iter++)
{
if (att_iter->key.compare(attribute) == 0)
{
if (isVariant)
{
return att_iter->value; //return variant
}
else
{
return boost::get<T>(att_iter->value); // return type inside variant as given by T.
}
}
}
}
}
我会避免写一个专门化,而是提供一个返回变体类型的非模板化版本。差异很小,但用户代码(请求变体类型时)会稍微更清晰(不需要在调用中添加'>',并且不需要以不同的方式命名该函数,因为重载解析规则将选择非模板版本。 –
2011-03-02 15:23:14