我正在尝试了解此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 T
,int N
,void 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;
}
?
答案 0 :(得分:1)
三种c ++中的模板语法是否只是
template <typename T>
?
- 非类型模板参数;
- 类型模板参数;
- 模板模板参数。
需要使用typename
关键字来声明类型模板参数,需要使用template
和typename
关键字来声明模板模板参数。给定template <void (*T)(int &)>
,T
被声明为非类型模板参数(函数指针)。
关于为什么不做void doOperation(void (*T)(int &))
的原因,因为我们必须将T
声明为模板参数,否则它将只是一个函数参数名称。>