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

根据可变参数类型做出决定

如何解决根据可变参数类型做出决定

我知道我把标题弄得尽可能模糊,但样本有望设定目标。

我有一个 Base 类和 Derived 个类的族(经典的 OOD,仅此而已)。
此外,我有一个采用可变参数模板的函数,我想根据这些模板做出决定。

template<typename... Ts>
void do_smth(std::vector<std::shared_ptr<Base>>& vec) {
    for (auto&& ptr: vec) {
        if the dynamic type of ptr is one of Ts.. then do smth.
    }
}

我打算这样调用函数

do_smth<Derived1,Derived2>(vec);

我知道我可以使用 Ts... 或类似这样的方式将 std::variant 转发到 hold_alternative 检查,但我只有类型而不是值。更复杂的是,我的编译器受 C++14 支持的限制。
有人可以为此提出一些小巧/优雅的解决方案吗?

解决方法

更复杂的是,我的编译器仅限于 C++14 支持。

C++14 ... 所以你必须模拟模板折叠...

以下内容呢?

template<typename... Ts>
void do_smth (std::vector<std::shared_ptr<Base>>& vec) {

    using unused = bool[];

    for ( auto&& ptr: vec)
     {
       bool b { false };

       (void)unused { b,(b = b || (dynamic_cast<Ts*>(ptr) != nullptr))... };

       if ( b )
        { 
          // ptr is in Ts... list
        }
       else
        { 
          // ptr isn't in Ts... list
        }
    }
}

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