函数对象作为函数参数调入,具体问题如代码所示


template<typename T>template <typename VST>
void Vector<T>::traverse(VST& visit) {
    for (int i = 0;i < _size;i++)visit(_elem[i]);
}

template <typename T> struct Increase{
    virtual void operator() (T& e) { e++; }
};

template<typename T>
void Vector<T>::increase() {
   (*this).traverse(Increase<T>());
}
//错误    C2664 “void Vector<int>::traverse<Increase<T>>(VST&)”: 无法将参数 1 从“Increase<T>”转换为“VST & ”

不应该这么搞吧,要么传个函数指针进去,要么传个对象进去,这个对象的一个函数成员实现你所需要的功能

这个有帮助么:
Compiler Error C2664 | Microsoft Docs Learn more about: Compiler Error C2664 https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-2/compiler-error-c2664?view=msvc-160