在C++泛型编程中如何只特化类的某个成员函数
作者:网络转载 发布时间:[ 2013/4/24 10:02:45 ] 推荐标签:
方法7:
namespace
{
template <bool,typename T,typename> struct conditional { typedef T type; };
template <typename T,typename U> struct conditional<false,T,U> {typedef U type; };
}
template<class T, unsigned B>
struct Base
{
//other function
//....
void Func ()
{
typedef typename ::conditional<B!=16,primary_t,spec_t>::type type;
Func_impl(type());
}
private:
struct primary_t { };
struct spec_t { };
void Func_impl (primary_t) { std::cout << "primary function" << std::endl; }
void Func_impl (spec_t ) { std::cout << "specialization function" << std::endl; }
};
点评:和方法6类似,通过函数重载实现
方法8:
namespace
{
template <bool,typename T = void> struct enable_if { typedef T type; };
template <typename T> struct enable_if<true,T> {};
}
template<class T, unsigned B>
struct Base
{
//other function
//....
template <unsigned N>
typename ::enable_if<16!=N>::type
FuncImpl () { std::cout << "primary function" << std::endl; }
template <unsigned N>
typename ::enable_if<16==N>::type
FuncImpl () { std::cout << "specialization function" << std::endl; }
void Func() {
FuncImpl<B>();
}
};
点评:通过enable_if,利用SFINAE实现。
我们可以看到根据编译时模板参数int值的不同,我们重写模板类的某个成员函数的方法是多种多样的。针对上面这种情况,个人其实推荐方法2,我们没必要把简单的问题复杂化。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11