为什么自动类型推导只适用于函数,而不适用于类?
发布于 2009-12-17 21:48:52
在特定情况下,您总是可以像std::make_pair这样做
template<class T>
make_foo(T val) {
return foo<T>(val);
}编辑:我刚刚在“ C++ Programming Language,Third Edition”的第335页找到了以下内容。Bjarne说:
注意,类模板参数永远不会被推导出来。原因是多个构造器为一个类提供的灵活性使得这种推断在许多情况下是不可能的,在更多的情况下是模糊的。
这当然是非常主观的。在comp.std.c++中有一些关于这一点的讨论,似乎一致认为没有理由不支持它。这是不是一个好主意是另一个问题……
发布于 2009-12-17 21:49:23
在函数调用的情况下,编译器从参数类型推导出模板类型。例如std::max-function。编译器使用实参的类型来推导模板参数。这并不总是有效的,因为不是所有的调用都是明确的。
int a = 5;
float b = 10;
double result1 = std::min( a, b ); // error: template parameter ambigous
double result2 = std::min< double >( a, b ); // explicit parameter enforces use of conversion在模板类的情况下,这可能并不总是可能的。以这个类为例:
template< class T>
class Foo {
public:
Foo();
void Bar( int a );
private:
T m_Member;
};类型T从来不会出现在任何函数调用中,因此编译器根本不会提示应该使用哪种类型。
发布于 2009-12-17 21:48:32
我认为隐式类型转换只适用于函数参数,所以编译器可以推断它以使函数调用成功。
但是它怎么能推断出你想让它拥有什么类型呢?
当我们有了基于AI的编译器来读取我们的思想时,我们必须等待这样的一天。
https://stackoverflow.com/questions/1921817
复制相似问题