c++关于模板函数指针的问题

img

img

如图,头文件有一个模板结构体B和模板类A,A的fun函数参数为B的指针和一个函数指针,该函数指针的类型如A的p函数所示。
main函数里调用fun函数,但是头文件的25行报错:

img

哪位能帮忙看看什么问题吗
还有如果我想声明一个A的时候,它模板的int参数,有什么方法能用变量传进去吗?像这个意思:

img

报错的原因是非静态成员函数都必须与对象相引用,必须通过对象来调用,请参考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的模板参数只能是常量。

模板类还是类,用构造

模板推导是在编译器期,不是运行期,所以不能是一个变量。