首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

模板参数里头的小括号是什么意思呢

2012-12-31 
模板参数里面的小括号是什么意思呢?#include stdafx.htemplatetypename T class functortemplate ty

模板参数里面的小括号是什么意思呢?


#include "stdafx.h"
template<typename T> class functor;

template <typename FuncType> class functor_impl;

template <typename ReturnType, typename Arg1_Type>
class functor_impl<ReturnType(Arg1_Type)>
{
public:
virtual ~functor_impl() {}
virtual ReturnType operator()(Arg1_Type a) =0;
};

template<typename FuncType, typename Fun>  class functor_handler;

template<typename ReturnType, typename Arg1_Type, typename Fun>
class functor_handler<ReturnType (Arg1_Type), Fun>
: public functor_impl<ReturnType (Arg1_Type)>
{
public:
functor_handler()
{}
functor_handler(const Fun& f):m_f(f)
{}

ReturnType operator()(Arg1_Type a)
{
return m_f(a);
}

void operator=(Fun f)
{
m_f = f;
}
private:
Fun m_f;
};

template <typename R, typename X>
class functor<R>
{
public:
typedef R ReturnType;
typedef X Arg1_Type;

typedef functor<ReturnType (Arg1_Type)> ProtypeFun; 
functor():ptr_f(NULL)
{}
~functor(){delete ptr_f;}

template <class Fun>
ProtypeFun& operator= (Fun f)
{
if(ptr_f) delete ptr_f;
ptr_f = new functor_handler<ReturnType (Arg1_Type), Fun>(f);
return *this;
}

ReturnType operator()(Arg1_Type a)
{
return (*ptr_f)(a);
}

private:
functor_impl<ReturnType (Arg1_Type)>* ptr_f;

};
void test(int a)
{
printf("hehe\n");
}
struct test2{
void operator()(int a)
{
printf("haha\n");
}
};


int _tmain(int argc, _TCHAR* argv[])
{
functor<void (int)> fun;
fun = test; 
fun(55);
test2 a;
fun = a; 
fun(66);
return 0;
}


比如:里面的class functor_impl<ReturnType(Arg1_Type)> ,<ReturnType(Arg1_Type)怎么解释呢?
[解决办法]
<ReturnType(Arg1_Type)

ReturnType 代表函数的返回类型。
Arg1_Type  代表函数的参数类型。

[解决办法]
template <typename ReturnType, typename Arg1_Type>
class functor_impl<ReturnType(Arg1_Type)>
是关于template <typename FuncType> class functor_impl的偏特化,template <typename FuncType> class functor_impl是主模板。

class functor_impl<ReturnType(Arg1_Type)>是functor_impl对于函数类型ReturnType(Arg1_Type)的偏特化,该函数类型的返回类型为ReturnType,形参类型为Arg1_Type。
[解决办法]
引用:
template <typename ReturnType, typename Arg1_Type>
class functor_impl<ReturnType(Arg1_Type)>
是关于template <typename FuncType> class functor_impl的偏特化,template <typename FuncType> class fu……
++
------解决方案--------------------


引用:
谢谢楼上诸位的回答:
我的主要疑惑是模板参数一般是这样写的:
template <typename ReturnType, typename Arg1_Type>
像这样写
class functor_impl<ReturnType(Arg1_Type)>
ReturnType(Arg1_Type)这地方为什么要用小括号呢? 这是不是模板特化的一种语法格式呢?
……

这是个函数类型啊 返回值是ReturnType类型 参数是Arg1_Type类型

热点排行