这个模板参数是什么?

时间:2011-12-12 16:56:12

标签: c++ templates

所以我今天遇到了关于C ++模板编程的问题,有人能解释一下A(*)(B)作为模板参数吗?

template <class X, class Y, class A, class B>
struct replace_type_impl<A(*)(B),X,Y,false>
{
  typedef typename replace_type<A,X,Y>::type (*type)(typename replace_type<B,X,Y>::type);
};

4 个答案:

答案 0 :(得分:8)

类型A (*)(B)是指向函数的指针类型,该函数采用类型B的一个参数并返回类型A的值。

这只是另一种类型。您的代码是类模板replace_type_impl部分特化的实例。

答案 1 :(得分:4)

这是一个函数指针类型,对于一个带B并返回A的一元函数。

此模板将X替换为Y [*],只要X出现在函数指针类型A(*)(B)中。它在返回类型A和参数类型B中单独替换它,然后将它们组合回一个名为type的新typedef,它也是一个函数指针。

[*]或者可能用X取代Y,或者做一些完全不同的事情 - 我不知道 replace_type做了什么,但我认为这是一个公平的猜测。

答案 2 :(得分:1)

它是一个指向函数的指针,该函数返回A并将B作为其单个参数。

答案 3 :(得分:1)

A(*)(B)

这是一种类型;指向函数的指针,该函数采用B by-value并按值返回A