【问题标题】:Partial specialization of function templates功能模板的部分专业化
【发布时间】:2011-04-12 14:54:43
【问题描述】:

有谁知道在 C++11 中,函数模板是否可以部分特化?

【问题讨论】:

    标签: c++ templates c++11 partial-specialization


    【解决方案1】:

    不,他们不能。 C++0x 标准草案有一节 (14.5.5) 关于类模板部分特化,但没有提及函数模板部分特化。

    【讨论】:

    【解决方案2】:

    No; they were proposed as core language issue #229(来自n1295)但最终被拒绝了(而且完全正确,因为超载可以完成这项工作)。

    【讨论】:

    • 我不得不不同意“非常正确”。重载并不总是有效,因为我们不能有仅在返回类型上有所不同的重载。如果我可以执行以下操作,那就太好了,例如: template T& Foo() { ... } template void Foo() { .. . }
    • 我同意重载是不够的。假设我想为带有自定义 create_* 和 destroy_* 函数的传统 C 结构重载 std::make_shared 。在这种情况下,部分特化将非常有用。
    • 对“完全正确”的更多分歧:enable_if。如果我们可以部分专门化函数,我们就可以避免使用标签助手的笨拙黑客攻击。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多