首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套模板专业化

嵌套模板专业化
EN

Stack Overflow用户
提问于 2009-02-20 02:18:50
回答 7查看 9.4K关注 0票数 24

有个脑屁..。做这样的事有可能吗?

代码语言:javascript
复制
template<int a> struct Foo
{
    template<int b> struct Bar;
};

template<int a> struct Foo<a>::Bar<1> //Trying to specialize Bar
{
};

我不需要这样做,但它将允许我很好地向命名空间范围隐藏一些实现细节。

谢谢你的建议!

P.S.:我忘了提到在Foo的范围内显式地专门针对Bar的语言不支持。总之,AFAICS。

EN

回答 7

Stack Overflow用户

发布于 2009-02-21 18:35:49

可以,停那儿吧。但您需要更改调用结构,但只需更改一点点。

具体来说,使用策略模式将成员函数的实现重组为一个类(允许专门化)。

只要策略类不是嵌套的(因此不依赖于非专门的模板类型),这是允许的。

(这可能在语法上不正确,但这个想法应该是明确的)

代码语言:javascript
复制
template <class T>
class OuterThingThatIsNotSpecialized
{
  template <class U>
  void memberWeWantToSpecialize(const U& someObj_)
  {
    SpecializedStrategy<U>::doStuff(someObj_);
  }
};

template <class U>
struct SpecializedStrategy;

template <>
SpecializedStrategy<int>
{
  void doStuff(const int&)
  {
    // int impl
  } 
};

template <>
SpecializedStrategy<SomeOtherType>
{
  void doStuff(const SomeOtherType&)
  {
    // SOT impl
  } 
};

这是非常有用的,因为对不存在实现的类型的OuterThingThatIsNotSpecialized调用将根本无法编译。

PS。您甚至可以使用此策略对模板函数进行部分专门化,否则这是C++不可能的。

票数 12
EN

Stack Overflow用户

发布于 2010-07-29 23:21:42

1998年标准( is 14882: 1998 )第18条第14.7.3节规定,当(外部)模板类未明确专业化时,不允许对(内部)模板成员类进行明确的专门化。

票数 11
EN

Stack Overflow用户

发布于 2009-02-20 03:10:14

根据这些职位:

http://www.cpptalk.net/template-member-function-specialization-vt11666.html

如果不专门化外部类,则无法专门化模板类的模板成员。他们没有引用诗句和章节。我的“C++编程语言”的副本没有立即显示任何信息,而且我的标准副本在家里(我的备份副本,在这里称为"Chris“也不在:-)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/568046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档