C++ 函数指针作为模板参数?

C++ 函数指针作为模板参数?,c++,C++,是否可以在不使用typedef的情况下将函数指针作为模板参数传递 template<class PF> class STC { PF old; PF& ptr; public: STC(PF pf, PF& p) : old(*p), ptr(p) { p = pf; } ~STC() { ptr = old; } }; void foo() {} void f

是否可以在不使用typedef的情况下将函数指针作为模板参数传递

template<class PF>
class STC {
    PF old;
    PF& ptr;
public:
    STC(PF pf, PF& p)
        : old(*p), ptr(p) 
    {
        p = pf;
    }
    ~STC() {
        ptr = old;
    }
};

void foo() {}
void foo2() {}

int main() {
    void (*fp)() = foo;
    typedef void (*vfpv)();
    STC<vfpv> s(foo2, fp); // possible to write this line without using the typedef?
}
模板
STC类{
pfold;
PF&ptr;
公众:
STC(PF、PF&p)
:旧(*p),ptr(p)
{
p=pf;
}
~STC(){
ptr=旧的;
}
};
void foo(){}
void foo2(){}
int main(){
void(*fp)(=foo;
typedef void(*vfpv)();
STC s(foo2,fp);//不使用typedef就可以写这一行吗?
}
是:

stcs(foo2,fp);//像这样

这与使用
typedef
声明并删除
typedef
关键字和名称相同。

完全有可能,
我还建议您查找boost::function&boost::bind作为替代解决方案。

我建议您不能像Maciek建议的那样使用boost(例如,您不能在项目中使用外部库),您可以尝试使用functor。

这不是将函数指针作为模板参数传递,而是传递函数指针的类型。