Wie überlade ich mit Lambda-Syntax definierte Funktionen für bestimmte Konzepte (Anforderungen)?C++

Programme in C++. Entwicklerforum
Guest
 Wie überlade ich mit Lambda-Syntax definierte Funktionen für bestimmte Konzepte (Anforderungen)?

Post by Guest »

Ich benötige eine Überladung des Lambda für bestimmte Konzepte (Anforderungen). In der Vorlagensyntax funktioniert es einwandfrei, aber natürlich ist „Lambda keine Funktion“ und kann nicht überladen werden.
Leider ist dies bei den oben genannten Lösungen zum Überladen einer Lambda-Funktion nicht der Fall Hilfe, weil:
  • Meine Frage bezieht sich auf Konzepte/Anforderungen, nicht auf Typen (hier der Hauptunterschied).
  • Insgesamt habe ich viele verschiedene Konzepte und hacke mit if constexpr std::is_same_v wird ziemlich zerbrechlich; Ein neues Konzept wurde hinzugefügt und ich muss den gesamten Client-Code finden und aktualisieren, was nicht möglich ist.
Die Frage ist, ob ich bei der Lambda-Funktion bleibe Syntax, was kann ich tun, um denselben Namen für verschiedene Konzepte (Anforderungen) wie unten zu verwenden?

Code: Select all

#include 
#include 

template 
void fn_template(Rng& data) {
};

template 
void fn_template(Rng& data) {
};

constexpr auto lambda = [](Rng & data) {
};

// Redefinition error, of course
constexpr auto lambda = [](Rng & data) {
};

int main()
{
std::vector v = { 0.0f, 1.0f, 0.0f, 2.0f };

auto no_zeros = v | std::views::filter([](const auto& lhs) { return lhs != 0.0f; });

// Works just fine
fn_template(v);
fn_template(no_zeros);

// Can't achieve
lambda(v);
lambda(no_zeros);
}
Demo

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post