如何设置模板参数以允许灵活选择不同类型的功能

时间:2013-08-06 16:35:23

标签: c++ templates

例如

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:
    }
};

如何设置模板参数以便灵活选择不同类型的功能?代码可以改变只是允许灵活性很好。谢谢

1 个答案:

答案 0 :(得分:1)

将函数传递给类可能更好。如果你没有传递一些对象,你来例如defaut构造这样一个对象来调用:

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_;
};

由于可调用类型几乎总是无状态或内部状态很小,因此不应对复制这些类型产生任何影响。