模板专用化和函数指针
Template specialization and function pointer
我有一个模板化的结构,然后我像下面这样专门化它:
template <class T>
struct FunctionSignature;
template <class Return, class Arg0>
struct FunctionSignature<Return (Arg0)>
{
typedef Return(*type)(Arg0);
};
所以我像这样举例:
FunctionSignature<int (const std::string& str)>::type f = &onefunction;
函数 onefunction 具有以下签名: int onefunction(const std::string &str)
所以这个编译很好。现在我的问题是:没有第一个结构FunctionSignature
,我能做我所做的事情吗?我试过这个,但它没有编译:
template<class R (class U)>
struct A
{
typedef R(*type)(U);
};
实例:
A<int (const std::string &)>::type f = &onefunction;
我在 c++03 中这样做是为了加深我对 c++ 的理解。
现在我的问题是:是否有可能做我所做的事情,没有 第一个结构函数签名?
不,这是不可能的。
为了利用部分类模板专用化,您需要有一个要专攻的主类模板。
从部分专业化:
语法:
模板<参数列表>类键类头名<参数列表>声明参数列表>参数列表>
其中类头名标识先前声明的名称 类模板。
该模板无效。它有一个类型,一个返回类型 R 的匿名、非类型函数指针,并接受类型 U 的参数。但是,这些类型是不明确的,因此每当编译器尝试复制代码时,它都会失败。您可以通过两种方式解决此问题。
template<class R, class U>
struct A {
typedef R(*type)(U);
};
A<int, const std::string&>::type f = &onefunction;
或者,如果您想要非类型参数
template<class R, class U, R(*type)(U)>
struct A {
R g(U arg) {return type(arg);}
};
A<int, const std::string&, &onefunction> f;
相关文章:
- QMetaObject invokeMethod的基于函数指针的语法
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- c++r值引用应用于函数指针
- 模板函数指针和lambda
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- 带有类的函数指针
- () 函子后面的括号,而不是函数指针?
- 全局作用域中函数指针的赋值
- 使用"Task"函数指针队列定义作业管理器
- 将成员函数指针作为参数传递给模板方法
- 如何创建对象函数指针C++映射?
- 匹配函数指针作为模板参数?
- 通过函数指针定义类范围之外的方法
- 存储在类中的函数指针
- C++从函数指针数组调用函数
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 整数键映射到头文件中的成员函数指针
- 从类成员函数到类 C 函数指针的转换
- 如何将内联匿名函数分配给C++函数指针
- 将字符缓冲区强制转换为函数指针