有个脑屁..。做这样的事有可能吗?
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。
发布于 2009-02-21 18:35:49
可以,停那儿吧。但您需要更改调用结构,但只需更改一点点。
具体来说,使用策略模式将成员函数的实现重组为一个类(允许专门化)。
只要策略类不是嵌套的(因此不依赖于非专门的模板类型),这是允许的。
(这可能在语法上不正确,但这个想法应该是明确的)
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++不可能的。
发布于 2010-07-29 23:21:42
1998年标准( is 14882: 1998 )第18条第14.7.3节规定,当(外部)模板类未明确专业化时,不允许对(内部)模板成员类进行明确的专门化。
发布于 2009-02-20 03:10:14
根据这些职位:
http://www.cpptalk.net/template-member-function-specialization-vt11666.html
如果不专门化外部类,则无法专门化模板类的模板成员。他们没有引用诗句和章节。我的“C++编程语言”的副本没有立即显示任何信息,而且我的标准副本在家里(我的备份副本,在这里称为"Chris“也不在:-)
https://stackoverflow.com/questions/568046
复制相似问题