c – 多个类的一个模板专门化

假设我们有一个模板函数“foo”:

template<class T>
void foo(T arg)
{ ... }

我可以使某些特定类型的专业化,例如

template<>
void foo(int arg)
{ ... }

如果我想对所有内置数字类型(int,float,double等)使用相同的专业化,我会写这些行多次.我知道身体可以抛出另一个功能,只需调用这一点就可以在每一个专业化的身上进行,但是如果我可以避免为每种类型写入这个“void foo(…”),那将会更好任何可能告诉编译器我想使用这种专业化的所有这些类型?

您可以使用std :: numeric_limits来查看类型是否是数字类型(is_specialized对于所有浮点数和整型基本类型都是true).

// small utility
template<bool> struct bool2type { };

// numeric
template<typename T>
void fooImpl(T arg, bool2type<true>) {

}

// not numeric
template<typename T>
void fooImpl(T arg, bool2type<false>) {

}

template<class T>
void foo(T arg)
{ fooImpl(arg, bool2type<std::numeric_limits<T>::is_specialized>()); }
相关文章
相关标签/搜索