静态多态性:函数重载与模板特化

时间:2017-06-16 22:04:07

标签: c++

假设我想创建一个通用的Serialize函数,它允许我序列化内置类型,组合类型和用户定义类型。然后我看到两种方法:

  • 基于超载:

    • Serialize()为所有(支持的)内置类型
    • 重载
    • 为vector / map / tuple添加了函数模板重载,它们委托给元素类型的Serialize重载
    • 使用ADL
    • 找到用户定义的重载
  • 基于类模板的专业化:

    • 委托给Serialize
    • 的单个SerializeHelper<T>()::serialize(...)函数
    • SerializeHelper专门用于所有内置类型
    • 部分模板专业化可用于实现vector / map / tuple泛化的专业化
    • 用户可以为自己的类型提供专业化

每种方法的优缺点是什么?

他们如何比较编译时性能?

注意:尽管标题相似,但这个问题Template Specialization VS Function Overloading的副本,因为该问题是关于ADL vs 功能模板专业化< / em>(而不是类模板专业化)。

0 个答案:

没有答案