对于共享公共(public)基类的类的以下代码,我很感激帮助专门化方法 doIt()
,如下所示
#include <iostream>
#include <boost/utility.hpp>
#include <boost/type_traits.hpp>
struct BarBase {};
struct Bar: BarBase {};
struct FooBase {};
struct Foo: FooBase {};
template <typename T>
struct Task
{
// I'd like to specialize this method for classes with a common base class
void doIt();
};
// my attempt (does not compile)
template <typename T>
typename boost::enable_if<boost::is_base_of<FooBase, T> >::value
doIt() {
std::cout << "Type is derived from FooBase\n";
}
int main()
{
Task<Foo> f;
f.doIt();
}
最佳答案
您不能专门化模板类成员。您可以特化一个类,每个特化都是一个完全独立的类,不从非特化模板继承任何内容(它可能具有也可能不具有非特化类的全部或部分成员)。
你还可以做的是在模板类中有一个模板成员函数,并专门化它。所以你可以这样做:
template <typename T>
struct Task
{
void doIt() { doItPriv<T>(); }
private:
template<typename T1>
void doItPriv();
};
然后特化doItPriv
。
关于c++ - 为派生类特化类模板方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9413241/