我有一个模板函数,它为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.
}
因为我没有为Derived
或Derived2
显式实例化函数,所以我得到了未定义的引用,但是,我想绑定明确定义的Base
类。
如何使用C ++ - 03强制模板解析为从Base派生的所有对象的Base类?
我可以通过Derived
类到Base
类定义的专门化来实现吗?
答案 0 :(得分:4)
怎么样:
template <> void function(Derived &arg)
{
function<Base>( arg );
}
编辑:你也可以通过功能重载执行此操作,正如 aschepler 建议的那样:
void function(Derived &arg)
{
function<Base>( arg );
}
它在概念上是相同的,但我同意,稍微好一点:)