gpt4 book ai didi

c++ - 专门化嵌套模板

转载 作者:太空宇宙 更新时间:2023-11-04 13:43:08 26 4
gpt4 key购买 nike

我有一个看起来像这样的类模板 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。

对于此类问题还有其他想法/解决方法吗?

最佳答案

这个呢?

template <class T>
struct SpecialClass : T {};

template <class T>
void method1024(A<B<TImpl1, TImpl2>, C<SpecialClass<T>>> a) {
...
}

此重载专用于任何 SpecialClass,后者又派生自其他类型,因此您可以传递 C<SpecialClass<TImpl3>> ,例如,您的 C 实现仍已指定(因为 SpecialClass 的类型为 TImpl3)。

关于c++ - 专门化嵌套模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com