Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 推导成员函数的参数列表_Templates_C++17_Variadic Templates_Template Meta Programming - Fatal编程技术网

Templates 推导成员函数的参数列表

Templates 推导成员函数的参数列表,templates,c++17,variadic-templates,template-meta-programming,Templates,C++17,Variadic Templates,Template Meta Programming,我们希望能够推断模板中成员函数调用的参数列表。这是一个更大项目的一部分,该项目最终执行类型转换,允许调用目标函数 我们的研究结果表明,这对我们很有帮助 我们现在一直在寻找成员函数的类似概念。关键元素在以下源代码1示例中: 在main中,comment//Free function.:这演示了Free函数的成功案例,并为Free函数展示了我们希望为成员函数实现的功能 在main中,注释对成员函数的外部调用。和问题1。这起草了我们试图支持的对成员函数的外部调用的目标语法 在对象::exec(…)中

我们希望能够推断模板中成员函数调用的参数列表。这是一个更大项目的一部分,该项目最终执行类型转换,允许调用目标函数

我们的研究结果表明,这对我们很有帮助

我们现在一直在寻找成员函数的类似概念。关键元素在以下源代码1示例中:

  • 在main中,comment
    //Free function.
    :这演示了Free函数的成功案例,并为Free函数展示了我们希望为成员函数实现的功能
  • 在main中,注释
    对成员函数的外部调用。
    问题1
    。这起草了我们试图支持的对成员函数的外部调用的目标语法
  • 对象::exec(…)
    中:这将从对象内部起草调用的目标语法
请参阅演示我们当前研究的第二个代码块:我们知道函数和成员指针之间的区别,调用成员需要对象标识。但是我们不能用代码来表达我们的知识。第二个代码块不编译

实现所示符号的正确符号和模板演绎结构是什么

资料来源1
#包括
无空函数(int p1,double p2){

std::cout既然您希望
包装器
通过模板参数包装成员函数指针,那么您必须知道如何调用成员函数指针。通常我们使用
(obj.*mfptr)(args…
(optr->*mfptr)(args…)调用成员函数指针
,显然对象本身也是调用操作所必需的。因此在
包装器::运算符()
中,我们不仅需要每个参数,还需要对象

模板
结构包装器;
模板
结构包装器{
//似乎您不关心cvref限定符,所以我不会编写所有重载。
自动运算符()(T对象,参数…参数){
返回(obj.*F)(参数…);
}
自动运算符()(T*obj,Args…Args){
返回(obj->*F)(参数;
}
};
实际上,成员函数调用与将对象视为第一个参数的函数调用类似(而不是等于

f;
f(foo{},3.14);
编辑: 既然您希望同时包装实例,
包装器
必须与实例一起构造:

模板
结构包装器;
模板
结构包装器{
//我还省略了引用传递语义的重载。
包装器(tobj):实例(std::move(obj)){
自动运算符()(Args…Args){
返回(实例。*F)(参数…);
}
私人:
T例;
};
int main(){
富x;
包装f{x};
f(3.14);
}

如果没有类的实例,就不能调用成员函数。什么是
f(3.14)
假设在这里使用?您的代码示例中没有
foo
的实例。
不编译
为什么不编译?有什么错误?请完整引用它。我打赌这很有启发性。@super:忘记了实例。编辑后,添加了实例。我想OP希望包装器记住实例:
包装器f(x);f(3.14);/*的作用类似于x.bar(3.14);*/
-这是对包装的一个小修改;它只需要记住
x
@RaymondChen我不确定OP是否知道成员函数调用需要对象本身,或者他需要函数包装(甚至是函数指针)这就像
obj.bar
。我们可以让
Wrapper
喜欢它,但我们也可以让
Wrapper
喜欢使用函数指针的那个。这取决于OP真正想要什么。@RedFog&Raymond,目标是包装实例。太好了。学到了很多!