模板类作为另一个类中的模板参数

时间:2018-08-06 05:12:10

标签: c++ class templates

所以这是一个问题,即使过去两天都在搜索此网站(和其他网站)后也无法得到答案。

为便于讨论,假设我要创建两个模板类 a b 。类 a 只是用户定义的数据类型,例如向量或矩阵,因此我可以重载不同的运算符,并简化使用这些特殊数据类型的工作。类 b 将采用类 a 作为模板参数(可以认为是矢量的2D字段或任何数据类型 a 表示)并且 a b 类都应在 header 文件中声明,但应在 .cpp 文件中实现。

编辑:在我们必须在 header 文件中实现它们的意义上,我知道模板的局限性。但我也知道,我们可以在编译时定义显式模板参数(如果我们知道将采用哪些模板参数),然后将实现分为 header .cpp 文件。如果我的模板参数是标准的c ++类型(例如float,doubles或int),则效果很好,但是当模板参数本身是带有模板参数的类时,我不知道如何继续操作,请参见以下代码及其说明。

以代码形式,这会引起类似这样的声音

a.h

template<class T>
class a {
    public:
        a(T);
    private:
        T data;
};

a.cpp

#include <iostream>
#include "a.h"

// explicit template declaration
template class a<double>;

template<class T>
a<T>::a(T in) {
    data = in;
}

b.h

template< class T>
class b {
    public:
        b(T);
    private:
        T item;
};

b.cpp

#include <iostream>
#include "b.h"

// explicit template template declaration
template class b<double>;

template<class T>
b<T>::b(T in) {
    item = in;
}

最后是 main.cpp

#include <iostream>
#include "a.h"
#include "b.h"

int main() {
    a<double>    foo(3);   // this works
    b<a<double>> bar(foo); // this doesn't
    return 0;
}

当我编译并运行以上代码时,我会得到

main.cpp:7: undefined reference to `b<a<double> >::b(a<double>)' 

我已经修改了一段时间了,我知道问题出在 b 类。我尝试使用

template<template<class> class T>

代替

template<class T>

我认为它应该是正确的用法(或类似的形式),但是随后我在 b.cpp 文件中的显式模板声明中遇到了问题,这仅与我模板的理解。

有什么想法应该对 b.cpp b.h 进行更改,以使此最小示例生效?

0 个答案:

没有答案