假设我有一个具有模板类型的函数T和另外两个班级A and B.
template <typename T>
void func(const T & t)
{
...........
//check if T == A do something
...........
//check if T == B do some other thing
}
我该如何进行这两项检查(不使用 Boost 库)?
如果你真的只是想要一个布尔值来测试是否T == A
,那么你可以使用is_same
,在 C++11 中可用为std::is_same
,或在 TR1 之前为std::tr1::is_same
:
const bool T_is_A = std::is_same<T, A>::value;
您可以自己简单地编写这个小类:
template <typename, typename> struct is_same { static const bool value = false;};
template <typename T> struct is_same<T,T> { static const bool value = true;};
通常,您可能会发现将分支代码打包到您专门用于的单独的类或函数中更方便A
and B
,因为这会给你一个编译时条件。相比之下,检查if (T_is_A)
只能在运行时完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)