【发布时间】:2014-11-19 16:25:25
【问题描述】:
我有一个看起来像这样的类模板 A。将 TImpl1 和 TImpl2 视为定义抽象数据类型 B 和 C 的实现以解决属于 A 的问题的参数:
template <typename TImpl1, typename TImpl2, typename TImpl3>
A<B<TImpl1, TImpl2>, C<TImpl3> >
我还有很多非成员函数,它们获取 A 的一个实例,相互调用并对 A 做一些事情。现在我想为我所使用的特定类型的 A 类更改单个方法的规范来介绍一下。
简单的方法:我引入一个空结构“SpecialClass”并进行部分特化:
struct SepcialClass;
// method already existed
template <typename TImpl1, typename TImpl2, typename TImpl3>
method1024(A<B<TImpl1, TImpl2>, C<TImpl3> > a) {
...
}
// new method for only some
template <typename TImpl1, typename TImpl2>
method1024(A<B<TImpl1, TImpl2>, C<SpecialClass> > a) {
...
}
因此,每当我声明A<B<...>,C<SpecialClass> > 时,所有方法都会正常运行,并且对于method1024,选择了专门的方法。
这完全可行,但是:我失去了指定 C 实现的可能性。
很遗憾,我无法通过添加第三个参数来重新设计 A。
对于此类问题还有其他想法/解决方法吗?
【问题讨论】:
标签: c++ templates template-specialization partial-specialization