我知道如何完善转发参数。但是,我从不同的来源(例如 Effective Modern C++ Item 24 - Scott Meyers)读到,只有当您拥有确切的模板名称时,才能完美转发,例如:
template<typename T>
void foo(T&& param) { bar(std::forward<T>(param)); }
我正在寻找的是是否有一种方法可以完善转发模板模板参数,例如:
template<template<int, class TypeT> class Vector, int Size, typename TypeT>
void foo(Vector<Size, TypeT>&& param) { bar(std::forward<Vector<Size, TypeT>>(param)); }
当我编译上述内容时,我收到一条错误消息:“您无法将左值绑定到右值引用”(VC12),这向我表明编译器不将 && 识别为“通用引用”,而是将其识别为右值引用. 这种完美的转发可能对我有用,因为我可以利用推断的 TypeT 和 Size。
问题:是否可以完善转发模板模板参数?如果是这样,我的语法在哪里不正确?
谢谢!