自动插入模板参数?

时间:2010-11-09 14:35:53

标签: c++ templates

几天后,我确实 发现了 C ++的行为,其中模板参数被自动插入,如本例所示(无意义,仅用于表示我的意思) ):

#include <iostream>

template<typename Type> void setVar(Type& subj, const Type& in)
{
    subj = static_cast<Type>(in);
}

int main()
{
    int foo;
    setVar(foo, 42);
    std::cout << foo << std::endl;
}

我的问题:

  • 这种行为叫什么?
  • 是否有特殊规则可以自动插入模板的时间和原因?

2 个答案:

答案 0 :(得分:1)

  

这种行为叫什么?

模板参数推断。

  

是否有特殊规则可以自动插入模板的时间和原因?

你不能说像templates are inserted。而是从参数中自动推导出参数类型。何时以及如何?这就是TAD的全部意义。

查看C ++ 03中的14.8.2部分

答案 1 :(得分:0)

它被称为模板参数推导,当然还有特殊规则。许多规则。在标准[temp.deduct]的14.8.2中。

摘要版本是如果有一组模板参数允许调用该函数,那么将使用这些参数调用它。复杂性正是允许的,以及如何在可能的替代方案之间进行选择。