c – 部分模板专业化

c – 部分模板专业化,第1张

概述我有一个模板类的场景 template<typename X, typename Y>class Foo{ typedef Y::NestedType Bar; int A (Bar thing); void B(); int C(X that); // other stuff}; 然后我希望A()方法在X是给定类型时具有不同的行为(但是B和C可以保持不变,而实际代码实际上有大 我有一个模板类的场景
template<typename X,typename Y>class Foo{ typedef Y::nestedType bar; int A (bar thing); voID B(); int C(X that); // other stuff};

然后我希望A()方法在X是给定类型时具有不同的行为(但是B和C可以保持不变,而实际代码实际上有大约10种其他方法,其中一些方法非常冗长,经常调整..所以我宁愿避免进行全班专业化并复制和粘贴完整的类实现)

我继续写道:

template<typename T>int Foo<MyType,T>::A(bar thing);

但我的编译器(clang 163.7.1)甚至拒绝将其视为任何类型的模板特化.

在我编写代码的方式中是否隐藏了一些语法错误,或者这种编码风格是无效的?不幸的是,即使其他编译器确实支持这个成语,我的公司仍然坚持使用clang.

感谢您的帮助.

解决方法 使用重载
template<typename X,typename Y>class Foo{ // allows to wrap up the arguments template<typename,typename> struct Types { }; typedef Y::nestedType bar; int A (bar thing) {   return aimpl(thing,Types<X,Y>()); } voID B(); int C(X that); // other stuffprivate:  template<typename X1,typename Y1>  int aimpl(bar thing,Types<X1,Y1>) {    /* generic */  }  template<typename Y1>  int aimpl(bar thing,Types<SpecificType,Y1>) {    /* special */  }};

您不能部分专门化类模板的成员.你写的是类模板本身的部分特化的成员函数A的定义.

总结

以上是内存溢出为你收集整理的c – 部分模板专业化全部内容,希望文章能够帮你解决c – 部分模板专业化所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存