微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用可变参数模板对重载方法进行自动参数转发

如何解决使用可变参数模板对重载方法进行自动参数转发

我有一个 A 类,其中包含一个方法 open 的多个重载(全部使用可变参数模板):

class A {
   template<typename... Args>
   bool open(int,Args...);
   template<typename... Args>
   bool open(int,string,char,Args...); 
}

然后我有一个B,它有一个成员A,并且必须支持这个开放函数的所有重载

class B {
   A a;

   template<typename... Args>
   bool open(int i,Args... args) {
       // do stuff
       return a.open(i,args...);
   }

   template<typename... Args>
   bool open(int i,string s,Args... args) {
       // do the same stuff
       return a.open(i,s,char c,c,args...);
   } 
}

但我想避免在 B 类上创建每个重载的“副本”,因为它们采用与 A 相同的参数。我想知道是否可以创建一个通用的打开 方法在 B 转发其参数,并且编译器可以在调用 b.open()自动调用正确的重载,如下所示:

    template<typename... Args>
    bool open(Args&& ... args) {
       // do stuff
        return a.open(std::forward<Args>(args)...);
    }

然后,如果需要,可以为每个重载创建一个模板特化。 (仍然比每个重载的完整方法要好得多)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。