首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类vs函数的C++中的模板类型推导?

类vs函数的C++中的模板类型推导?
EN

Stack Overflow用户
提问于 2009-12-17 21:34:19
回答 3查看 7.4K关注 0票数 15

为什么自动类型推导只适用于函数,而不适用于类?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-17 21:48:52

在特定情况下,您总是可以像std::make_pair这样做

代码语言:javascript
复制
template<class T>
make_foo(T val) {
    return foo<T>(val);
}

编辑:我刚刚在“ C++ Programming Language,Third Edition”的第335页找到了以下内容。Bjarne说:

注意,类模板参数永远不会被推导出来。原因是多个构造器为一个类提供的灵活性使得这种推断在许多情况下是不可能的,在更多的情况下是模糊的。

这当然是非常主观的。在comp.std.c++中有一些关于这一点的讨论,似乎一致认为没有理由不支持它。这是不是一个好主意是另一个问题……

票数 18
EN

Stack Overflow用户

发布于 2009-12-17 21:49:23

在函数调用的情况下,编译器从参数类型推导出模板类型。例如std::max-function。编译器使用实参的类型来推导模板参数。这并不总是有效的,因为不是所有的调用都是明确的。

代码语言:javascript
复制
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

在模板类的情况下,这可能并不总是可能的。以这个类为例:

代码语言:javascript
复制
template< class T>
class Foo {
public:
    Foo();
    void Bar( int a );
private:
    T m_Member;
};

类型T从来不会出现在任何函数调用中,因此编译器根本不会提示应该使用哪种类型。

票数 4
EN

Stack Overflow用户

发布于 2009-12-17 21:48:32

我认为隐式类型转换只适用于函数参数,所以编译器可以推断它以使函数调用成功。

但是它怎么能推断出你想让它拥有什么类型呢?

当我们有了基于AI的编译器来读取我们的思想时,我们必须等待这样的一天。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1921817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档