你如何强迫模板化与基类相匹配?

时间:2013-01-30 19:47:58

标签: c++ templates explicit-instantiation

我有一个模板函数,它为Base类显式实例化,但不适用于Derived类。如何强制通过Derived类(或其他派生类)的用法与Base类匹配?

标题文件:

class Base {
};
class Derived : public Base {
};
class Derived2 : public Base {
};

template <typename Example> void function(Example &arg);

实施档案:

// Explicitly instantiate Base class:
template void function<Base>(Base &arg);

// Define the template function:
template <typename Example> void function(Example &arg) {
  // Do something.
}

因为我没有为DerivedDerived2显式实例化函数,所以我得到了未定义的引用,但是,我想绑定明确定义的Base类。

如何使用C ++ - 03强制模板解析为从Base派生的所有对象的Base类?

我可以通过Derived类到Base类定义的专门化来实现吗?

1 个答案:

答案 0 :(得分:4)

怎么样:

template <> void function(Derived &arg)
{
     function<Base>( arg );
}

编辑:你也可以通过功能重载执行此操作,正如 aschepler 建议的那样:

void function(Derived &arg)
{
     function<Base>( arg );
}

它在概念上是相同的,但我同意,稍微好一点:)