C ++中的模板语法是否只是模板<typename t =“”>?

时间:2018-10-24 00:47:26

标签: c++ templates

我正在尝试了解此Function passed as template argument。原来,在我读过的有关模板的某些地方,您这样声明它们:

template <typename MyTypeName>
class ...

现在做什么

template <void (*T)(int &)>

是什么意思?这更像是关于语法的问题,而不是代码的作用。据我了解,它制作了一个带有函数指针的模板化函数,并且该函数接收对整数的引用作为参数。

但是,我认为它不适合模板的语法。 typename关键字在哪里?通用模板语法是什么?

我找到的最接近的是:Why must we do template <class/typename> T instead of just template T。显然,您可以定义“常量”模板参数。所以我想模板语法是这样的:

template <arguments>

其中参数可以是typename Tint Nvoid T(int)等类型的东西。如果是这样,定义的好处是什么

template <void (*T)(int &)>
void doOperation()
{
  int temp=0;
  T(temp);
  std::cout << "Result is " << temp << std::endl;
}

像这样

void doOperation(void (*T)(int &))
{
  int temp=0;
  T(temp);
  std::cout << "Result is " << temp << std::endl;
}

1 个答案:

答案 0 :(得分:1)

  

c ++中的模板语法是否只是template <typename T>

不。 template parameters

三种
  
      
  • 非类型模板参数;
  •   
  • 类型模板参数;
  •   
  • 模板模板参数。
  •   

需要使用typename关键字来声明类型模板参数,需要使用templatetypename关键字来声明模板模板参数。给定template <void (*T)(int &)>T被声明为非类型模板参数(函数指针)。

关于为什么不做void doOperation(void (*T)(int &))的原因,因为我们必须将T声明为模板参数,否则它将只是一个函数参数名称。