下面的示例代码在gcc下编译并按我的希望工作。它允许我将一个具有函数定义的对象作为模板参数进行实例化,但是该类能够在函数中使用不同的类型,就好像它们分别作为类型模板参数一样传递。函数指针非类型模板参数转换为类型模板参数
template<class FuncSignature> class Obj;
template<class Type1, class Type2> class Obj<Type1 (Type2)>
{
public:
Type1 var1;
Type2 var2;
};
int main(int argc, char **argv)
{
Obj<char (int)> A;
A.var1 = 'a';
A.var2 = 3;
}
即使它似乎工作,我不知道这段代码在做什么。为什么此代码可以工作并符合C++标准?
是的,它的法律, 当不确定,我试着http://www.comeaucomputing.com/tryitout/来检查合规性。它由于部分模板专门化而起作用。 – Anycorn 2010-11-28 15:37:34
使用元编程,您可以使用Boost FunctionTypes库实际提取有关函数类型(此处为`char(int)`)的大多数信息:http://www.boost.org/doc/libs/1_45_0/libs/function_types/ doc/html/index.html它可能是硬编码,但它是一个有趣的阅读:) – 2010-11-28 20:00:42