C ++:将类型声明为另一个模板类型的变体

时间:2015-02-13 05:38:01

标签: c++ templates

在下面的代码中,我定义了一个AnotherClass模板来获取第二个类型的参数。这些参数中的每一个都是由另一个模板创建的类型。两个类型参数之间的唯一区别是传递给这些类型的int参数的值。模板。评论显示了我真正想做的事情。

#include <iostream>
using namespace std;

template <int size> 
class MyClass {
private:
    int sz;
public:
    MyClass() {
        this->sz = size;
    }
    void tellSize() {
        cout << this->sz;
    }
    int length() {
        return this->sz;
    }
};

// template <typename T1>
template <typename T1, typename T2>
class AnotherClass {
private:
    T1 myC;
    T2 myCp1;
    //templateof(T1)<parameterof(T1)+1> myCp1;
public:
};

int main() {
    //AnotherClass<MyClass<10> > myC;
    AnotherClass<MyClass<10>, MyClass<11> > myC;
    return 0;
}

我真正想做的是将myCp1的类型静态声明为&#34;使用myC&#39; s模板,myC&#39; s参数增加1&#34;无需将两种类型都传递给AnotherClass模板......

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:3)

您可以提供AnotherClass的部分特化,它会进行模式匹配以分离出模板类和模板参数。

template <typename T>
class AnotherClass;

template <template <int> class SomeTemplate, int size>
class AnotherClass<SomeTemplate<size> >
{
  SomeTemplate<size> myC;
  SomeTemplate<size+1> myCp1;
};