我想把这个专门化,不改变主线。是否可以根据其基类专门化某些东西?但愿如此。
-编辑-
我将有几个继承自 SomeTag 的类。我不想为他们每个人写相同的专业。
class SomeTag {};
class InheritSomeTag : public SomeTag {};
template <class T, class Tag=T>
struct MyClass
{
};
template <class T>
struct MyClass<T, SomeTag>
{
typedef int isSpecialized;
};
int main()
{
MyClass<SomeTag>::isSpecialized test1; //ok
MyClass<InheritSomeTag>::isSpecialized test2; //how do i make this specialized w/o changing main()
return 0;
}
原文由 user34537 发布,翻译遵循 CC BY-SA 4.0 许可协议
这篇文章描述了一个巧妙的技巧: http ://www.gotw.ca/publications/mxc++-item-4.htm
这是基本的想法。您首先需要一个 IsDerivedFrom 类(它提供运行时和编译时检查):
然后您的 MyClass 需要一个可能专门的实现:
MyClass 实际上看起来像:
然后你的主要方式会很好: