【发布时间】:2014-01-29 17:04:06
【问题描述】:
我想为 BASECLASS 和所有派生类提供一个特殊的格式化程序。我有以下课程:
struct BASECLASS { ... };
struct SPECIALFORMAT : BASECLASS { ... }
struct ANOTHERSPECIALFORMAT : BASECLASS { ... }
template <class T>
struct LISTFORMATTER {
list<T> l;
bool format() {
};
}
bool LISTFORMATTER<BASECLASS>::format() { ... }
LISTFORMATTER<BASECLASS> bcFt;
LISTFORMATTER<SPECIALFORMAT> spFt;
LISTFORMATTER<ANOTHERSPECIALFORMAT> aspFt;
bcFt.format(); // <-- ok
spFt.format(); // <-- Calling standard format(), not specialized
aspFt.format(); // <-- Calling standard format(), not specialized
如何为基类和所有继承类专门化一个方法?
EDIT 最好不要使用 boost。 c++(不是 c++11)
【问题讨论】:
-
与this question 的相似性、要求和潜在解决方案几乎相同,即按基类进行专业化。而且你不会喜欢答案。
-
目前并没有一种简单快速的方法来实现 is_base_of,我可以通过在每个声明中手动指定 true 或 false 来实现。谢谢。
标签: c++ templates template-specialization