是否可以在函数模板中转换参数C++?
Can arguments be converted in function template in C++?
例如,我有一个函数模板:
template<typename T> void foo(T a, T b, T &c);
如果我int, double, double
传递给它怎么办?在Xcode中,它会报告错误。那么这是否意味着我不能为一种模板类型传递不同类型的参数?
在另一种情况下,如果我调用foo<double>(double, int, int)
,这是一个错误。但foo<int>(double, int, int)
会没事的。此问题是否与引用类型有关?
如果不显式指定类型,则无法传递不同的类型。模板是强类型的,如果类型不匹配,类型推断将失败。
在第一个示例中,您将指定模板类型,因此使用double
显式实例化模板
foo<double>(T, T, T&)
所以该函数将参数(double, double, double&)
.该示例不起作用,因为编译器不对基本类型引用执行类型转换(即,使用int n; double& c = n;
或相反是非法的),并且您将int
作为最后一个参数传递,该参数无法绑定到double&
引用。
第二个例子
foo<int>(T, T, T&)
是可以的,您可以显式指定类型并使用参数(int, int, int&)
实例化函数。现在编译器对第一个参数执行所需的转换(double
到-int
);没有对引用执行转换。
不,当然,T
不能同时int
和double
。函数参数与调用的参数不匹配。
如果您在模板函数中需要不同的参数类型,请使用此参数作为示例
template<typename A, typename B, typename C>
void add( A a, B b, C& c ) {
c = static_cast<C>( a + b );
}
如果您正在使用指向对象的指针的模板类型,则可能需要改用dynamic_cast。
相关文章:
- C++转换参数初始化问题
- C2664 无法从'initializer list'转换参数
- 隐式可转换参数,但属于引用类型
- 传递到函数(C )时转换参数
- 了解错误 C2664:无法转换参数 1
- 错误 C2664:无法从'NvPhysicalGpuHandle'转换参数 1
- Unicode 字符问题/转换参数
- 在运行时根据某些元数据强制转换参数包值
- 错误 C2664:"errno_t wcstombs_s(size_t *,字符 *,size_t,常量 wchar_t *,size_t)":无法转换参数 4
- 错误C2664:无法转换参数错误
- 无法转换参数错误
- Boost.python自动转换参数
- "尝试升级使用已弃用的转换参数指定的输入文件"是什么意思?
- 是否可以在函数模板中转换参数C++?
- 错误C2664:无法转换参数(指纹传感器检测)
- 无法转换参数 - 模板错误
- 编译zxing时,Libconv无法转换参数
- C++ 无法转换参数
- std::p air<_Ty1,_Ty2>::p air<_Ty1,_Ty2>& 无法转换参数
- 无法转换参数-转换丢失限定符