C专用模板继承自非专业版

C专用模板继承自非专业版,第1张

概述我试图解决问题,但找到了不同的解决方案. 但出于好奇,想知道以下是否可行: template< class > struct S;template< > struct S< Foo > : struct< Foo > {}; 我希望能够从专门的struct继承非专用结构.上面的例子不起作用,因为继承的结构是专用的,导致无限递归. 一种可能的解决方案是添加第二个模板参数,比如bool specia 我试图解决问题,但找到了不同的解决方案.
但出于好奇,想知道以下是否可行:
template< class > struct S;template< > struct S< Foo > : struct< Foo > {};

我希望能够从专门的struct继承非专用结构.上面的例子不起作用,因为继承的结构是专用的,导致无限递归.

一种可能的解决方案是添加第二个模板参数,比如bool special,这样默认值为false,而专用模板的参数为true.但是,由于实例化需要指定其他参数,因此会使事情变得有点混乱.

有没有其他方法来实现上述?

最初的问题是实现矩阵矩阵,其中矩阵本身可能有额外的运算符,这取决于组成矩阵是否有那些运算符.我希望这是有道理的.同时,不同的专用矩阵需要具有相同的基类,同时保留相同的名称,尽管具有不同的模板参数.我认为可能有一种方法可以使用enable_if和type traits

解决方法 您可以将所有通用内容保存在单独的类型中,并使用您的专业化扩展它:
template <typename> struct S_generic { /* generic stuff here */ };template <typename T> struct S : public S_generic<T> { /* nothing here */ };template <> struct S<Foo> : public S_generic<Foo> { /* extra stuff here */ };

编辑:或者,如果您不喜欢额外的名称,在实例化模板时使用额外标志而没有混乱的方法是使用默认值:

template <typename T,bool fully_defined=true> struct S;template <typename T> struct S<T,false> { /* generic stuff here */ };template <typename T> struct S<T,true> : public S<T,false> {};template <> struct S<Foo,true> : public S<Foo,false> { /* extra stuff here */ };
总结

以上是内存溢出为你收集整理的C专用模板继承自非专业版全部内容,希望文章能够帮你解决C专用模板继承自非专业版所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1239950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存