代码之家  ›  专栏  ›  技术社区  ›  Albert

C++:一个类的模板参数,而不是函数[复制品]

  •  3
  • Albert  · 技术社区  · 15 年前

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

    调用模板函数时,如果模板参数与参数不明确,则无需指定模板参数。例如,用于:

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

    你可以打电话给我 foo(1) 它会起作用的,不需要 foo<int>(1) .

    对于类/结构,这是不正确的,即使从构造函数参数中可以清楚地看到。例如:

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

    现在我不能只做一个 do_something_with(Foo(1)) ,一定是 do_something_with(Foo<int>(1)) .

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

    现在的问题是:为什么?背后有什么合理的理由吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Puppy    15 年前

    据我所知,函数模板和类模板对于lulz来说是不同的,没有什么真正的原因让它们彼此不同。当然,类模板有部分专门化(T*)作为优势。