Jon*_*ove 13 c++ templates template-specialization enable-if c++11
我需要编写一个模板化函数,根据其参数的类别,它的行为会有所不同:
template<class ContainerType>
bool myFunc(ContainerType in){
//do some stuff
}
template<class NotAContainerType>
bool myFunc(NotAContainerType in){
//do something else
}
Run Code Online (Sandbox Code Playgroud)
我被限制在C++ 11中,所以static_if不在桌面上.此外,类的ContainerType和NotAContainerType非常大,并且可能在将来发生变化,因此只需手动添加一些例外作为模板特化也是不明智的.
我知道std::enable_if解决方法,但是如果我需要将它应用于两个相互不同的类集,我该如何使用它?
Jar*_*d42 20
为您的概念容器创建特征,然后,您可以使用SFINAE
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
}
Run Code Online (Sandbox Code Playgroud)
或标签调度
namespace details
{
template <typename T>
bool myFunc(T in, std::true_type){
//do some stuff
}
template <typename T>
bool myFunc(T in, std::false_type){
//do some stuff
}
}
template <typename T>
bool myFunc(T in){
return details::myFunc(in, is_container<T>{});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |