模板类型错误的通用引用
universal reference for template type error
请原谅这个糟糕的标题…
通常在这样的函数中:
template <class T>
void f(T&& i){
}
T&&
是一个通用参考。在这样的上下文中,它是一个右值引用:
template <class T>
struct s{
void f(T&& t){}
};
这是有意义的,因为T
相对于s
是一个固定类型,而f()
是一个方法。
然而,显然在这个上下文中:
template <class T, unsigned n>
std::array<T, n>
f(T&&){
}
T&&
也是右值引用。不过,这种情况与上面的情况不同。那么,T&&
在这里也是右值引用而不是通用引用的原因是什么呢?
这是因为您显式地提供了参数类型(我假设这么多,但这是使示例编译的唯一方法)。
f<int,5>
不执行任何类型推导,其形参为int&&
。没有引用坍缩。
您可以通过编写f
模板来解决这个问题:
template<unsigned n, typename T>
array<decay_t<T>, n>
f(T&& t);
现在,t
是一个转发/通用引用,如果你不显式地提供第二个模板参数。
相关文章:
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++引用错误
- 已定义函数时出现 G++ "未定义的引用"错误
- 链接 cmake 时出现未定义的引用错误
- 只有级联分类器会发出未定义的引用错误
- 2个模板化类的非模板友元函数未定义引用错误
- C/C++ 取消引用错误:在空检查之前取消引用
- 为什么我的C++代码无法编译,出现未定义的引用错误
- 我的代码中C++未定义的引用错误?
- 模板专用化会导致未定义的引用错误
- .cpp文件中未定义的引用错误
- c++ 中目录中文件的未定义引用错误
- Opencv4 使用 pkg-config 给出未定义的引用错误
- 使用Cygwin C++时出现未定义的引用错误,为什么我的文件没有链接?
- 共享指针取消引用错误
- 编译简单的多文件类程序时出现未定义的引用错误
- 模板函数产生未定义的引用错误
- 调用提取重加载器会产生对"运算符"的未定义引用错误>>
- 如何修复"未定义的引用"错误 opencv 和 g++
- 未定义的引用错误,我该怎么办?