函数指针作为模板参数?

3

是否可以在不使用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?
}

这并不是将函数指针作为模板参数传递,而是传递函数指针的类型。 - leftaroundabout
3个回答

11

是的:

STC<void (*)()> s(foo2, fp); // 就像这样

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


3

完全有可能,我也建议寻找boost::function和boost::bind作为另一种解决方案。


0

如果你不能像Maciek建议的那样使用boost(例如,你不能在你的项目中使用外部库),你可以尝试使用一个函数对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接