【发布时间】:2021-07-02 10:30:37
【问题描述】:
如果CStringT继承自CSimpleStringT并且CSimpleStringT的类定义如下,根据CSimpleString Documentation:
template<typename BaseType>
class CSimpleStringT
CSimpleStringT 如何有两个模板参数?它们是否都具有相同的BaseType 参数,例如template<typename BaseType, class BaseType> class CSimpleStringT?
template<typename BaseType, class StringTraits>
class CStringT :
public CSimpleStringT<BaseType,
_CSTRING_IMPL_::_MFCDLLTraitsCheck<BaseType, StringTraits>::c_bIsMFCDLLTraits>
【问题讨论】:
-
它没有。您向我们展示的代码将永远无法工作。带有一个参数的模板永远不能传递两个参数。这不是模板的工作方式。
-
我怀疑
CSimpleStringT有一个未记录的附加模板参数,该参数仅用于使用 SFINAE 技术解决模板重载问题。这通常看起来像template <typename BaseType, typename Enable = void> ...。在任何情况下,显示此额外参数和保留标识符(如_CSTRING_IMPL_和_MFCDLLTraitsCheck)强烈表明该文档正在泄露其实现细节。我的建议是完全不用担心第二个模板参数。 -
什么是模板重载的好资源?
-
这是一个相当广泛的主题,但我为另一个问题写了一个有点冗长的解释:stackoverflow.com/a/55129549/5023438
-
谢谢,我会复习的!