2

例如

template<class D, Function>
struct A
{
    void foo()
    {
        D d;
        int i = Function(d);
        // Here function can be a free function: int fun(D& d)
        // or member function: int D::fun()
        // or function object:
    }
};

如何设置模板参数以灵活选择不同类型的功能?代码可以更改,只要允许灵活性就可以了。谢谢

4

1 回答 1

1

将函数传递到类中可能会更好。如果你不传递一些对象,你必须例如默认构造这样一个对象来调用:

template<class D, typename Function>
struct A
{
    explicit A(Function f) : func_(f) { }

    void foo()
    {
        D d;
        int i = func_(d);
        // Here function can be a free function: int fun(D& d)
        // or member function: int D::fun()
        // or function object:
    }

    Function func_;
};

由于可调用类型几乎总是无状态的或具有微小的内部状态,因此复制这些不应该有任何影响。

于 2013-08-06T16:42:19.727 回答