当可以使用的可能的函子可能有不同数量的参数时,如何将多个泛型仿函数传递给类构造函数?

时间:2017-10-05 07:59:29

标签: c++ templates clang functor

我正面临着C ++的问题,很可能只是语言本身的限制,因此这个问题可能没有解决方案。

我有多个功能,类似于以下(顺便说一下,有2个以上)

template <class Input, class Output>
Output A(Input in) {
   ...
   return ...
}

template <class Input1, class Input2, class Output>
Output B(Input1 in1, Input2 in2) {
   ...
   return ...
}

现在,这些函数必须传递给类构造函数并作为仿函数存储在类中,但是,我们不知道哪个仿函数被传递给构造函数,因此我们不知道它的数量这个仿函数的论点。这意味着我面临两个问题:

  1. 我无法找到一种方法来模板化构造函数以接受任何仿函数。
  2. 我找不到一种方法来将仿函数存储在同一个模板化的类中。
  3. 我遇到的问题是我不知道如何正确地模板Inputs1Output1Inputs2Output2

    template <?>
    class C {
    
       std::function<Output1(Inputs1)> f1;
       std::function<Output2(Inputs2)> f2;
    
    public:
    
       template <?>
       C(std::function<Output1(Inputs1)> f1, std::function<Output2(Inputs2)> f2)
          : f1(f1), f2(f2) {}
    
    }
    

    我不必使用std::function,任何没有它的解决方案都可以。

    这可以作为模板lambda完成,或者也可以与任何普通函数完全相同。

    我能想象的唯一选择是将所有函数作为具有operator()成员的类,并且这些类都扩展了一些其他空类,我们可以将它们用作主类中的参数。

    class Functor {}
    
    class A : public Functor {
       public: operator()() {...}
    }
    
    class C {
    
       Functor f1;
       Functor f2;
    
    public:
    
       C(Functor f1, Functor f2) : f1(f1), f2(f2) {}
    
    }
    

    这是可行的C ++代码吗?

    类布局非常灵活,因此任何类都可以接受将在以后执行时使用的函数的解决方案都是可以接受的。

    我正在使用clang ++ -std = c ++ 14

0 个答案:

没有答案