如何在C ++中使用Generic类创建Object?

时间:2012-04-04 23:58:53

标签: c++

我写了一个带有两个组件的类,一个随机类型T和一个整数,我实现它如下: 在Test.h中,如:

    template <class A, int B>class Test { // two components, 
    private: 
        A first;
        int second;

    public:
        Test();
        Test (A,int);
    }

在Test.cpp中我做了:

    template <class T,int i> Test<T,i>::Test() {}
    template <class A,int i>Test<A,i>::Test(T a, int b):first(a) {second=b;}

但在主要功能中:

    Test<int, int >  T1; //It can not be passed
    Test<int, 4> T2; //It can not be passed 
    int x = 8;
    Test<int, x> T3 (3,4);// can not be passed

如何从上面的泛型类声明对象实例?

2 个答案:

答案 0 :(得分:0)

您忘记了类模板定义末尾的分号。

答案 1 :(得分:0)

template <class T,int i> Test<T,i>::Test() {}
template <class A,int i>Test<A,i>::Test(T a, int b):first(a) {second=b;}

您需要将这两个模板函数定义放在标题而不是.cpp中 - 实际代码需要对所有调用这些函数的编译单元可用,而不仅仅是声明。

Test<int, int >  T1; //It can not be passed

这是无效的,第二个int是一种类型,但模板需要int

Test<int, 4> T2; //It can not be passed 

这个

没有错
int x = 8;
Test<int, x> T3 (3,4);// can not be passed

您需要创建这些行中的第一行static const x = 8(即使x成为编译时常量)以使其可用作模板参数

在课程定义的最后还有缺少的分号。