我有两个类A类和B类它们都是A中成员函数的模板类我希望它在A的类型是B时以特殊方式行动 对于任何其他类型的正常方式,我不知道如何做到这一点?
template <class B>
class B
{
private:
T m;
public:
...... any member functions
}
template <class T>
class A
{
private:
T var;
public:
void doSomething();
};
template <class T>
void A<T>::doSomething(){...........//implementation}
template <class T>
void A<B<T>>::doSomething(){................//different implementation}
答案 0 :(得分:0)
您可以通过这种方式专攻A
:
template <class T>
class A<B<T>> {
// ...
};
这是partial template specialization的实例。
如果您拒绝对整个班级进行专业化,则可以将工作从A<T>::doSomething()
推迟到部分专业化的函数doSomethingForA<T>(A &)
,这可能是A<T>
的朋友。
答案 1 :(得分:0)
希望这可以解决您的问题:
#include <iostream>
template <typename T>
struct B {};
template <typename T> struct A;
template <typename T>
void doSomething(T&) { std::cout << "General\n"; }
template <typename T>
void doSomething(A<B<T>>&) { std::cout << "Special\n"; }
template <typename T>
struct A {
void doSomething() {
::doSomething(*this);
}
};
int main()
{
A<int> general;
A<B<int>> special;
general.doSomething();
special.doSomething();
}