este não é um bug específico, mas uma questão geral de design em C++. Considere o seguinte cenário:
struct MyInterface {};
struct Data : MyInterface{};
struct DataWrapper
{
SomeContainerOf<MyInterface*> getData()
{...}
private:
std::vector<Data> dataStorage;
};
Em termos dos meus requisitos, preciso da função de acesso para DataWrapper
retornar um contêiner de MyInterface*
valores (ponteiros porque estamos realmente retornando Data
valores).
Idealmente, queremos fazer isso sem fazer uma cópia. Quero saber a melhor maneira de fazer isso. Pelo que posso dizer, algo como o seguinte é a maneira idiomática do C++ de fazer isso:
auto DataWrapper::getData()
{
return dataStorage
| std::ranges::views::transform(
[](Data& d) -> MyInterface* { return &d; }
);
}
Mas o problema é que está muito claro que esse método acessador é explícito sobre seus valores de retorno - preciso que saibam que esse método retorna essa lista, e estou preocupado que ao fazer o tipo de retorno auto
, isso atrapalhe um pouco isso . Parece que (posso estar errado aqui) você não deveria saber qual view
é o tipo de a (em um estilo semelhante aos lambdas)
A alternativa que estou considerando seria fazer uma visualização customizada (onde eu poderia deixar o tipo um pouco mais claro), mas realmente me dói reimplementar algo que está tão claramente no padrão. Qual seria a medida recomendada para tal cenário? O C++ moderno diz que devo manter o valor de retorno auto
?