【问题标题】:C++: template params for a class but not a function [duplicate]C ++:类但不是函数的模板参数[重复]
【发布时间】:2011-04-14 08:32:36
【问题描述】:

可能重复:
Template type deduction in C++ for Class vs Function?

调用模板函数时,如果模板参数与参数没有歧义,则无需指定模板参数。例如。为:

template<typename T> T foo(T a) { /*...*/ }

您可以直接拨打foo(1) 就可以了,它不需要是foo&lt;int&gt;(1)

这不适用于类/结构,即使从构造函数参数中可以清楚地看到。例如:

template<typename T> struct Foo { Foo(T a) { /*...*/ } };

现在我不能只写do_something_with(Foo(1)),它必须是do_something_with(Foo&lt;int&gt;(1))

通常,为了解决这个问题,只有一些简单的包装函数,它们基本上只是包装了构造函数。即使在 STL 中也是如此:std::make_pair 就是这样一个例子。

现在的问题是:为什么会这样?这背后有什么合理的原因吗?

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

    据我所知,lulz 的函数模板和类模板是不同的,没有真正的理由让它们彼此不同。当然,类模板具有偏特化 (T*) 作为优势。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-10
      • 2018-12-16
      • 2016-05-23
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多