如何从模板类传递函数
how transfer function from template class
本文关键字:传递函数 更新时间:2023-10-16
#include <iostream>
#include <windows.h>
#include <string.h>
#include <functional>
#include <stdint.h>
#include <stdio.h>
using namespace std;
template <typename T>
class someclass {
public:
T value;
int sum(int vl1, int vl2) { return vl1 + vl2; };
};
template <typename T>
class someclass2 {
public:
T value;
void print(const std::function<int(int, int)>& func) {
cout << func(3, 4) << 'n';
};
};
int main(int argc, const char **argv)
{
someclass<int> obj1;
someclass2<int> obj2;
obj2.print(obj1.sum);
}
编译器在最后一行显示错误:错误 C3867:"someclass::sum":非标准语法;使用"&"创建指向成员的指针
注意
int sum(int vl1, int vl2) { return vl1 + vl2; };
不以任何方式使用其所有者类的成员,它可以安全地声明为静态的,在这种情况下,此代码将起作用。
此代码的问题在于成员函数的类型与独立函数不同。它是类someclass
的成员,所以它的类型是int (someclass::*)(int, int)
要调用它,你需要该类的实例。
一般情况下,文字解决方案是在 lambda 表达式创建的函子中隐藏this
传递:
obj2.print( [&](int a, int b)-> int { return obj1.sum(a,b); } );
您可以使用std::bind
来执行此操作
int main(int argc, const char **argv)
{
someclass<int> obj1;
someclass2<int> obj2;
using namespace std::placeholders;
obj2.print(std::bind(&someclass<int>::sum, &obj1, _1, _2));
}
相关文章:
- 通过键入的引用问题传递函数
- 通过两个嵌套函数传递C++函数的名称
- 如何从模板类传递函数
- 从私有函数传递函数作为参数
- 如何通过模板传递函数?
- 传递函数指针时未解析的外部符号
- 传递函数指针代替插槽函数
- 如何在 arduino 中传递函数参数
- "double(*)(string, double, double)"尝试传递函数C++时"double"转换错误
- 按引用传递函数参数
- 如何在类(C )中作为参数传递函数
- 在检查传递函数标识符时是否获得模板参数时遇到问题
- 在类之间传递函数指针
- 在C++中传递函数
- 为什么这是一个按指针传递函数
- 当指针具有可选参数时,如何传递函数指针
- C++模板在传递函数签名时未进行编译
- 是否可以通过引用传递函数对象
- C++传递函数作为具有多态类型的参数
- 通过引用或值传递函数