我的模板功能具有通用引用不起作用

My template function with the universal reference does not work

本文关键字:引用 不起作用 功能 我的      更新时间:2023-10-16

我想制作一个灵活的模板函数,并且可以同时采用rvalue和lvalue。这就是我写的:

template<typename T>
decltype(auto) normalize_pose(T&& pose)
{
    if (pose > 2 * M_PI) return std::forward<T>(pose - 2* M_PI);
} 

所以我仔细检查了该功能,对我来说似乎是正确的。然后我决定对其进行测试并写道:

int a = 2;
auto test = factorgraph::normalize_pose(a);

我得到此错误:

 error: use of ‘decltype(auto) factorgraph::normalize_pose(T&&) [with T = int&]’ before deduction of ‘auto’

如果我尝试添加<int>,我会发现不存在此类功能的错误。

应该是

if (pose > 2 * M_PI) return std::forward<T>(pose) - 2* M_PI;

仅将std::forward应用于变量。

,您还需要返回Else分支的值(同一类型以满足的类型 decltype(auto)(。

但是,就您而言,一个简单的:

template<typename T>
auto normalize_pose(const T& pose)
{
    return (pose > 2 * M_PI) ? pose - 2 * M_PI : pose;
}

处理所有情况。