C++ 将模板类作为参数传递给其他文件类?

C++ 将模板类作为参数传递给其他文件类?,c++,C++,我想在main.cpp上创建一个模板类,然后在来自另一个头/cpp的另一个类上处理它 这是我的密码: Main.cpp #include <iostream> #include "test.h" template<typename B> class foo{ }; int main() { return 0; } #包括 #包括“test.h” 模板 福班{ }; int main(){ 返回0; } 测试h namespace sn{ class A{

我想在main.cpp上创建一个模板类,然后在来自另一个头/cpp的另一个类上处理它

这是我的密码:

Main.cpp

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


template<typename B>
class foo{

};


int main() {

return 0;
}
#包括
#包括“test.h”
模板
福班{
};
int main(){
返回0;
}
测试h

namespace sn{
class A{
    public:
        void getint(foo<int> asd);    //error because it doesn't know foo
};
}
名称空间sn{
甲级{
公众:
void getint(foo-asd);//错误,因为它不知道foo
};
}
test.cpp

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

namespace sn{

void A::getint(foo<int> asd){   //error because it doesn't know foo

}    
}   
#包括
#包括“test.h”
名称空间序号{
void A::getint(foo-asd){//错误,因为它不知道foo
}    
}   

那么,如何从main.cpp传递模板类的实例或引入“foo”?我必须改变我的设计吗?

显而易见的方法是将
foo
的定义也移动到标题中:

foo.h:

template<typename B>
class foo{

};
模板
福班{
};
测试h:

#include "foo.h"

namespace sn {
struct A {
    void getint(foo<int>);
};
}
#包括“foo.h”
名称空间序号{
结构A{
void getint(foo);
};
}

从外观上看,
test.cpp
将保持不变,
main.cpp
将删除其对
foo
的定义。

在自己的标题中定义类模板,然后将该头文件包含在需要在头文件中使用
foo
定义
foo
的文件中,并将该头文件包含在所有要使用
foo
的源文件中。听说不能在头文件上定义模板类?我能看一个例子吗?@CarloBrew你听错了,这只是一个问题,如果我为原型制作不同的标题,我应该在哪里实现原型?我必须做foo.cpp吗?我明白了,谢谢。我是否必须制作foo.cpp来实现foo.h中的原型?@CarloBrew:至少在大多数典型情况下,您希望将模板的整个实现放在标题中(不理想,但在将模块添加到语言中之前这就是生命)。我明白了。所以我唯一的选择就是把所有东西都实现到头上?@CarloBrew:这不是唯一可能的选择,但却是最常见的选择。例如,如果您事先知道模板将实例化的所有类型,则可以将实现移动到源文件中,并在这些类型上显式实例化模板。