我可以为不同的类型集定义模板吗?

时间:2018-07-25 08:28:20

标签: c++ c++11 templates template-specialization enable-if

我需要编写一个模板化函数,其行为取决于其参数的类:

template<class ContainerType>
bool myFunc(ContainerType in){
//do some stuff
}

template<class NotAContainerType>
bool myFunc(NotAContainerType in){
//do something else
}

我只能使用C ++ 11,因此static_if不在讨论之列。另外,ContainerTypeNotAContainerType的类确实很大,并且将来可能会更改,因此,仅手动添加一些例外,因为模板专门化也不明智。

我知道std::enable_if的解决方法,但是如果需要将其应用于两个相互不同的类集,该如何使用呢?

1 个答案:

答案 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
}