我有一个模板函数
一组函数
如果我使用引用作为函数参数
所以,我的问题是:
func
:template<typename T>
void func(T p) { f(p); }
一组函数
f
:f(SomeType&);
f(int);
...
如果我使用引用作为函数参数
p
来实例化模板函数func
,而没有明确指定模板参数T
,则推断出的类型将不会是p
的引用类型,而是p
所引用的类型,例如:SomeType s;
SomeType& ref_to_s = s;
func(ref_to_s); // Type deduction results in: func<SomeType>(ref_to_s)
func<SomeType&>(ref_to_s); // Need to explicitly specify type to work with reference
所以,我的问题是:
- 为什么编译器在上述情况下无法推断出引用类型
SomeType&
? - 有没有一种定义模板函数
func
的方法,使得类型推导可以使用引用类型,而不需要显式指定模板参数T
?
明确一点,我希望能够同时使用以下两个函数(参见上面的函数f
):
func(ref_to_s); // Calls func<SomeType&>(ref_to_s)
func(1); // Calls func<int>(1)