gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:43:40 25 4
gpt4 key购买 nike

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

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 解决方法,但是如果我需要将它应用于两组相互不同的类,我该如何使用它?

最佳答案

Create a traits for your concept Container ,那么,你可以使用 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
}

或标签调度

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>{});
}

关于c++ - 我可以为不同的类型集定义模板吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51514248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com