如图,头文件有一个模板结构体B和模板类A,A的fun函数参数为B的指针和一个函数指针,该函数指针的类型如A的p函数所示。
main函数里调用fun函数,但是头文件的25行报错:
哪位能帮忙看看什么问题吗
还有如果我想声明一个A的时候,它模板的int参数,有什么方法能用变量传进去吗?像这个意思:
如图,头文件有一个模板结构体B和模板类A,A的fun函数参数为B的指针和一个函数指针,该函数指针的类型如A的p函数所示。
main函数里调用fun函数,但是头文件的25行报错:
哪位能帮忙看看什么问题吗
还有如果我想声明一个A的时候,它模板的int参数,有什么方法能用变量传进去吗?像这个意思:
报错的原因是非静态成员函数都必须与对象相引用,必须通过对象来调用,请参考https://blog.csdn.net/Colin_Downey/article/details/84886535?spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-14-84886535-blog-113070057.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-14-84886535-blog-113070057.pc_relevant_aa以及https://baike.baidu.com/item/%E6%88%90%E5%91%98%E5%87%BD%E6%95%B0%E6%8C%87%E9%92%88/8932336?fr=aladdin
改为如下代码,将不会报错
template<class T,int N>
struct A
{
B<T>* b = new B<T>;
void fun(B<T>* paramB, void (A<T, N>::*p)(B<T>*)) {
(this->*p)(paramB);
}
void fun1(B<T>*) {
std::cout << "fun1" << endl;
}
};
struct S {
void fun() {}
};
void main()
{
A<int, 10> a;
a.fun1(a.b);
a.fun(a.b, &A<int,10>::fun1);
system("pause");
}
另外模板参数推导都是在编译期的,T类型会自动推导类型,int的模板参数只能是常量。