作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
假设我们有一个模板函数“foo”:
template<class T>
void foo(T arg)
{ ... }
我可以对某些特定类型进行特化,例如
template<>
void foo(int arg)
{ ... }
如果我想对所有内置数字类型(int、float、double 等)使用相同的特化,我会多次编写这些行。我知道 body 可以被扔给另一个函数,并且只需在每个特化的 body 中调用它,但是如果我可以避免为每种类型写这个“void foo(...”)会更好。有没有有没有可能告诉编译器我想对所有这些类型使用这个特化?
最佳答案
您可以使用 std::numeric_limits
来查看一个类型是否为数字类型(is_specialized
对于所有浮点和整数基本类型都为真)。
// 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>()); }
关于c++ - 一个模板专门化多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2430039/
我有一个带有模板函数的基类,该函数具有通用模板类型和专用版本。 #ifndef BASE_CLASS #define BASE_CLASS #include using namespace std;
我有这个 3D vector 模板 template class Vec3TYPE{ public: union{ struct{ TYPE x,y,z; }; struct{ TY
我是一名优秀的程序员,十分优秀!