c++ - 如何设置模板参数,灵活选择不同种类的函数

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

如何设置模板参数来灵活选择不同类型的函数?可以更改代码只是允许灵 active 很好。谢谢

最佳答案

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

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

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

关于c++ - 如何设置模板参数,灵活选择不同种类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18085723/

相关文章:

c++ - 关于函数中定义的 vector

c++ - 将私有(private)数据成员作为默认参数传递给该类的公共(public)方法时出错

c++ - 旋转框列表,仅显示已更改的值

c++ - 如何在 C++ 头文件和源文件中使用 NumPy C-API?

c++ - 在 C++ 中将整数添加到数组中?

c++ - 在线裁判的输出不同

c++ - "multiple template parameter lists are not allowed"?

c++ - 保证复制省略世界中的构造函数实例化

Django 模板 if 语句的计算结果始终为 true

c++ - 如何使用模板类查询 if(T==int)