模板函数,模板类
格式如下:
template<typename T>
T max(T a,T b) {
return b < a ? a : b;
}
//调用:
std::cout << max(7,42) << std::endl;
我实际使用的场景是,有多个相似功能的函数,要怎么统一定义。
//自己定义类
enum class _ScalarOp {
MUL, DIV, POWER, MAX, EQ, GE
};
template<_ScalarOp op>
void ScalarOp(const AlignedArray& a, scalar_t val, AlignedArray* out) {
for (size_t i = 0; i < a.size; ++i) {
if constexpr (op == _ScalarOp::MUL) {
out->ptr[i] = a.ptr[i] * val;
}
//省略部分.......
if constexpr (op == _ScalarOp::GE) {
out->ptr[i] = (uint32_t)(a.ptr[i] >= val);
}
}
}
//调用:
EwiseFunc<_EwiseOp::TANH>(a, b);
模板类定义如下:
template <typename T>
class Stack {
private:
std::vector<T> elems; // elements
public:
void push(T const &elem); // push element
void pop(); // pop element
T const &top() const; // return top element
bool empty() const { // return whether the stack is empty
return elems.empty();
}
};
//具体函数实现:
template <typename T>
void Stack<T>::push(T const &elem) {
elems.push_back(elem); // append copy of passed elem
}
//调用:
Stack<int> intStack;