根据可变类型做出决策



我知道我把标题弄得越模糊越好,但这个示例希望能设定目标。

我有一个Base班和Derived班的家庭(classyood,仅此而已)。
此外,我有一个函数,它接受可变模板,我想根据这些模板做出决定。

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

相关内容

  • 没有找到相关文章

最新更新