我有一个模板类Converter
,我想做一个部分专业化。棘手的部分是我想将它专门化到MyFoo::Vec
可以MyFoo
再次专门化为模板参数的地方。如果这听起来令人困惑,也许代码本身使它更清晰:
#include <iostream>
#include <vector>
template<class To>
struct Converter {
Converter(int from, To& to) {
to = To(from);
}
};
template<class T>
struct Foo {
typedef std::vector<T> Vec;
Vec vec;
};
// Template specialization: Convert from 'From' to 'MyFoo::Vec':
template<class MyFoo>
struct Converter<typename MyFoo::Vec > { // Error: template parameters not
// used in partial specialization
Converter(int from, typename MyFoo::Vec& to) {
to.push_back(typename MyFoo::Vec::value_type(from));
}
};
int main() {
Foo<float> myfoo;
Converter<Foo<float> > converter(2, myfoo.vec);
}
这只是一个源自我的实际代码的迷你示例。这个问题不是关于这种转换器有多有用。鉴于我需要这样的转换器及其专业化,我只是对正确的语法感兴趣。