函数指针作为模板参数?

时间:2009-07-29 04:28:34

标签: 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 foo2() {}

int main() {
    void (*fp)() = foo;
    typedef void (*vfpv)();
    STC<vfpv> s(foo2, fp); // possible to write this line without using the typedef?
}

3 个答案:

答案 0 :(得分:11)

是:

STC< void (*)() > s(foo2, fp); // like this

与获取typedef声明并删除typedef关键字和名称相同。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

我不能像Maciek建议的那样使用boost(例如,你不能在项目中使用外部库),你可能会尝试使用仿函数。