C++ 如何专门化模板
考虑现有情况C++ 如何专门化模板,c++,templates,c++14,C++,Templates,C++14,考虑现有情况 template<typename T, int N = 10> struct A { //whatever }; template <typename T1,typename T2, typename T3> struct B; template<typename T2, typename T3> struct B<double,T2,T3> { //... protected: A<T2>
template<typename T, int N = 10>
struct A
{
//whatever
};
template <typename T1,typename T2, typename T3>
struct B;
template<typename T2, typename T3>
struct B<double,T2,T3>
{
//...
protected:
A<T2> myA;
};
但是我不知道如何使用它…好吧,你的类
B
只能这样使用:
B<double, C, D> b;
template<typename T2, typename T3, int N>
struct B<double,T2,T3, N> {
//...
protected:
A<T2, N> myA;
};
B<TypeAndNumber<double, 33>, C, B> b;
专业化应该是这样的:
B<double, C, D> b;
template<typename T2, typename T3, int N>
struct B<double,T2,T3, N> {
//...
protected:
A<T2, N> myA;
};
B<TypeAndNumber<double, 33>, C, B> b;
模板
结构B{
//...
受保护的:
myA;
};
因此,您的类既可以像以前一样使用,也可以像这样使用:
B<double, C, D, 11> b;
B;
如果确实无法更改参数,则可以进一步对其进行专门化,以接收一个以数字作为模板参数的类型:
template<typename, int>
struct TypeAndNumber {};
模板
结构类型和编号{};
将你的社会化转变为:
template<typename T2, typename T3, int N>
struct B<TypeAndNumber<double, N>, T2, T3> {
//...
protected:
A<T2, N> myA;
};
模板
结构B{
//...
受保护的:
myA;
};
现在您的类可以像这样使用:
B<double, C, D> b;
template<typename T2, typename T3, int N>
struct B<double,T2,T3, N> {
//...
protected:
A<T2, N> myA;
};
B<TypeAndNumber<double, 33>, C, B> b;
B;
第二部分是我一直在寻找的,实际上我开始朝这个方向思考,而你打败了我:)