所以我今天遇到了关于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);
};
答案 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
。