【发布时间】:2020-11-19 11:03:32
【问题描述】:
我有一个带有模板参数 T 的类 A,它仅限于两种类型:T1 和 T2。因此,我为 T1 和 T2 类型显式实例化了 A 类,这样 A 的功能可以在源文件中定义,而无需在每次包含 A.hpp 时都重新编译。
A.hpp:
template<typename T>
class A {
public:
void basicMethod();
};
template class A<T1>;
template class A<T2>;
A.cpp:
template<typename T>
void A<T>::basicMethod() {
// ...
}
但是,现在我想向 A
A.hpp:
template<typename T>
class A {
public:
void basicMethod();
template<typename S>
void advancedMethod();
};
template class A<T1>;
template class A<T2>;
// How to explicitly instantiate A::advancedMethod here?
A.cpp:
template<typename T>
void A<T>::basicMethod() {
// ...
}
template<typename T>
template<typename S>
void A<T>::advancedMethod() {
// ...
}
如何为 (T, S) = {T1, T2} x {S1, S2} 显式实例化 A?根据我在网上找到的内容,我尝试在 A.hpp 的末尾添加这样的内容:
template void A<T1>::advancedMethod(S1);
template void A<T1>::advancedMethod(S2);
template void A<T2>::advancedMethod(S1);
template void A<T2>::advancedMethod(S2);
但是,这根本不起作用。
【问题讨论】:
-
我猜你
.cpp中的第二个模板方法应该是advancedMethod。 -
@super 是的,抱歉,我刚刚解决了这个问题。
标签: c++ templates explicit-instantiation