提问者:小点点

传递函数作为具有未知类型的类的模板参数


我知道我们可以这样做:

void f1(){ printf("1"); }
void f2(){ printf("2"); }

template <void F()>
class A{
public:
    void func(){
        F();
    }
};

int main(){
    A<f1> a1; a1.func(); // printing "1"
    A<f2> a2; a2.func(); // printing "2"
}

那么,在不知道函数f1和F2的返回和参数类型的情况下,有可能吗?例如,

void f1(){ ... }
int f2(){ ... }

int main(){
    A<f1> a1; a1.f();
    A<f2> a2; a2.f();
}

谢了。


共1个答案

匿名用户

在C++17中,您可以简单地使用auto

template <auto F>
class A{
public:
    void func(){
        F();
    }
};