說我有一些類模板:如何部分專門化所有枚舉的類模板?
template<typename T>
class {
// ....
}
我可以部分專門這個模板ALL指針方式:
template<typename T>
class<T *> {
// ....
}
我可以採用某種專門爲ALL枚舉模板?即,這樣做: (這是不行的,雖然)
template<typename T>
class<enum T> {
// ....
}
說我有一些類模板:如何部分專門化所有枚舉的類模板?
template<typename T>
class {
// ....
}
我可以部分專門這個模板ALL指針方式:
template<typename T>
class<T *> {
// ....
}
我可以採用某種專門爲ALL枚舉模板?即,這樣做: (這是不行的,雖然)
template<typename T>
class<enum T> {
// ....
}
使用C++ 11和SFINAE。
#include <type_traits>
template<typename T, typename = void>
struct Specialize
{
};
template<typename T>
struct Specialize<T, typename std::enable_if<std::is_enum<T>::value>::type>
{
void convert() { }
};
enum E
{
};
int main()
{
Specialize<E> spec;
spec.convert();
}
沒有C++ 11使用boost::enable_if
和boost::is_enum
THX,該訣竅。 – qwer1304
@ qwer1304功能模板專業化不是好主意。你不能部分專門化功能模板,只能顯式專門化。 – ForEveR
此方案適用於類,但我無法在功能模板中使用它,例如: template
不,你不能.. –