C ++ 2a-多态范围

问题描述 投票:0回答:1

我正在编写一个C ++库,并且有这样的想法[[amazing]],即尽可能多地使用C ++ 2a / C ++ 20。因此,我正在使用标准库概念并创建自己的库概念。但是,函数返回std::vector<X>的想法对我来说似乎不够C ++ 20,因此我在概念中声明了匹配std::ranges::view<X>的返回类型。然后,我实现了一些满足此概念的类。但是,当我想设计一个多态包装器类时,问题就出现了。因此,假设概念是C,并且我有三个实现类C1C2C3(但允许更多类)。现在,我想创建一个类C_virtual和一个派生自其的模板C_virtual_impl<C c>,这将使我能够多态地引用所有实现C的类。但是,要使其正常工作,我需要一个多态的std::ranges::view包装器,其本质与C_virtual相似。

我在标题和C ++参考中都没有看到这样的类。而且,当我自己开始实现它时,由于对迭代器的某些要求,特别是默认的可构造性,可交换性等,我很快发现自己无法做到。

标准库中有没有明显的解决方案或成语?如果没有,我该如何处理?可能需要更改设计。我当然不希望返回std::vector<X>或返回V<X>,其中V将是C的类型参数。我该怎么做?

我正在编写一个C ++库,并且有一个令人惊奇的想法,即尽可能多地使用C ++ 2a / C ++ 20。因此,我正在使用标准库概念并创建自己的库概念。但是,函数的概念...

c++ polymorphism virtual-functions c++20 c++-concepts
1个回答
1
投票
范围视图和许多其他模板技术,并不意味着可以与基于继承的多态性一起使用。这很像vector<BaseClass>并不是特别有用。
© www.soinside.com 2019 - 2024. All rights reserved.