C++ 将模板类作为参数传递给其他文件类?
我想在main.cpp上创建一个模板类,然后在来自另一个头/cpp的另一个类上处理它 这是我的密码: Main.cppC++ 将模板类作为参数传递给其他文件类?,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{
#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:这不是唯一可能的选择,但却是最常见的选择。例如,如果您事先知道模板将实例化的所有类型,则可以将实现移动到源文件中,并在这些类型上显式实例化模板。