如何通过虚拟功能启用完美转发?我真的不想像C ++ 03那样编写每个重载。
答案 0 :(得分:4)
你做不到。完美转发仅通过组合模板和右值引用来工作,因为它取决于T专用时实际类型T&&
的评估类型。您无法混合模板和虚拟功能。
但是,您可以通过某种类型的擦除机制来解决您的问题:
struct base {
virtual void invoke() = 0;
};
template <class T>
struct derived : public base {
derived( T&& yourval ) : m_value(std::forward(yourval)) {}
virtual void invoke() { /* operate on m_value.. */ }
T&& m_value;
};