我正在尝试编写一个函数来“字符串化”参数以用于记录目的。例如,我想写这样的东西:
vector<string> queries;
set<uint_8> filters;
LOG(INFO) << stringify<vector, string>(queries);
LOG(INFO) << stringify<set, uint_8>(filters);
这是我写的函数模板:
template <typename containerType, typename elemType>
string _stringify(const string name, const containerType<elemType> &elems) {
ostringstream os;
os << name << ": [";
BOOST_FOREACH(elemType elem, elems) {
os << elem << ",";
}
os << "]";
return os.str();
}
这是我收到的错误消息:error: ‘containerType’ is not a template
谢谢,
亚历克斯
您需要使用模板模板参数,例如,
template <template <typename> class containerType, typename elemType>
string _stringify(const string name, const containerType<elemType>& elems)
请注意,如果您希望将其与标准库容器一起使用,则大多数标准库容器都有多个模板参数(例如,序列容器有两个:一个用于值类型,一个用于分配器类型)。
使用以下方法可能更容易(而且更好)value_type
所有容器都有的 typedef。例如,
template <typename ContainerT>
void f(const ContainerT& c)
{
typedef typename ContainerT::value_type ElementT;
// Use ContainerT and ElementT
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)