私は再帰的に動作するはずのこの関数を持っています。バリデーションテンプレート関数の部分的な特殊化
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
を)打つことが起こるので、コンパイラは、この問題について-rightly-文句を言います。 だから私は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);
^
だから、誰もが必要な結果を達成する方法を指摘することができますか?
動作させるために少し変更を加える必要がありましたが、実際にはこれはプラグアンドプレイのソリューションでした。ありがとう。 – DrHell
@DrHell携帯電話から書きましたので、いくつかのタイプミスがあったら私を許してください。私はそれがあなたのためにうれしいです。 – skypjack
申し訳ありませんが、私は傲慢に聞こえませんでした、何か、将来の誰かがそれを使いたがっていて、最初の動作でうまくいかなかったのかどうか疑問に思っていただけです。再度、感謝します。 :) – DrHell