【发布时间】:2016-11-04 14:45:56
【问题描述】:
我有这个函数,它应该递归地工作。
template <class C, typename ...Arguments>
void addStyleClassRecursive(C *c, Arguments... arg)
{
c->addStyleClass(arg...);
for (unsigned int i=0; i<c->children().size(); ++i)
{
addStyleClassRecursive(c->children()[i], arg...);
}
}
现在碰巧在某个时候我遇到了一个没有 addStyleClass 成员函数的类 (Wt::WObject),所以编译器正确地抱怨这个问题。
好的。所以我想把代码专门化,为Wt::WObject添加一个版本:
template <class C=Wt::WObject, typename ...Arguments>
void addStyleClassRecursive(Wt::WObject *c, Arguments... arg)
{
for (unsigned int i=0; i<c->children().size(); ++i)
{
addStyleClassRecursive(c->children()[i], arg...);
}
}
这本身并没有给出编译器错误,但它被完全忽略(实际上编译器一直在抱怨 WObject 没有所需的成员函数,指向通用函数中的同一行)。
所以我试着用这种方式专门化它
template <typename ...Arguments>
void addStyleClassRecursive<Wt::WObject, Arguments...>(Wt::WObject *c, Arguments... arg)
{
for (unsigned int i=0; i<c->children().size(); ++i)
{
addStyleClassRecursive(c->children()[i], arg...);
}
}
现在编译器抱怨
non-type partial specialization 'addStyleClassRecursive<Wt::WObject, Arguments ...>' is not allowed
void addStyleClassRecursive<Wt::WObject, Arguments...>(Wt::WObject *c, Arguments... arg);
^
那么任何人都可以指出如何获得所需的结果?
【问题讨论】:
标签: c++ function templates variadic-templates partial-specialization