我的模板功能具有通用引用不起作用
My template function with the universal reference does not work
我想制作一个灵活的模板函数,并且可以同时采用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;
}
处理所有情况。
相关文章:
- 在 C++ 中通过引用传递类成员时,Const 不起作用
- 将数组作为引用传递到函数中不起作用
- 寻找有关为什么此C++代码在没有引用的情况下不起作用的解释
- 自定义类型转换运算符在转发引用上调用时不起作用(当对象按值传递时有效)
- 对列表迭代器指向的对象不起作用的引用
- 我的模板功能具有通用引用不起作用
- 赋值不起作用,但带有取消引用运算符的地址起作用?
- 取消引用引用不起作用
- 为什么 C++ 从推断的返回类型中去除引用限定符,为什么生存期延长不起作用?
- Visual Studio 2017 对项目的本机引用不起作用
- 为什么在这种情况下转发引用不起作用?
- 为什么 [ ] 括号在取消引用指针时不起作用?
- 在文档中引用使用doxygen的结构成员不起作用;结构成员未出现在文档中
- 使用引用遍历链接列表不起作用
- 为什么将指针转换为引用在我的访问器 (getter) 中不起作用?
- 链接相互引用的排序类。转发不起作用
- 传递的临时 concreate 派生对象,其中需要对抽象基的引用不起作用?
- 给出对类的零大小向量的引用不起作用
- 在 C++ 中初始化引用不起作用,但初始化 const 引用有效,为什么?
- 为什么路过引用不起作用