我有一个带有模板参数 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<T1> 和 A<T2> 添加一个模板化方法,其中模板参数再次被限制为两种类型:S1 和 S2:
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<T>::advancedMethod<S>?根据我在网上找到的内容,我尝试将这样的内容添加到 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);
但是,这根本不起作用。