我需要编写一个模板化函数,其行为取决于其参数的类:
template<class ContainerType>
bool myFunc(ContainerType in){
//do some stuff
}
template<class NotAContainerType>
bool myFunc(NotAContainerType in){
//do something else
}
我只能使用C ++ 11,因此static_if
不在讨论之列。另外,ContainerType
和NotAContainerType
的类确实很大,并且将来可能会更改,因此,仅手动添加一些例外,因为模板专门化也不明智。
我知道std::enable_if
的解决方法,但是如果需要将其应用于两个相互不同的类集,该如何使用呢?
答案 0 :(得分:20)
Create a traits for your concept Container,那么您可以使用SFINAE
-c 99
或标签分发
template <typename T>
typename std::enable_if<is_container<T>::value, bool>::type
myFunc(T in){
//do some stuff
}
template <typename T>
typename std::enable_if<!is_container<T>::value, bool>::type
myFunc(T in){
//do some stuff
}