C ++ Erlauben Sie nur eine Mitgliedsfunktion mit spezifischem Namen, um private Mitgliedsfunktion aufzurufen
Posted: 21 Mar 2025, 10:08
Ich habe die folgende Klassenhierarchie: < /p>
Ich weiß, dass eine solche Freundschaftserklärung von der Sprache nicht zulässig ist, aber kann ich dieses Verhalten erreichen, in dem dosenting () nur aus einer Mitgliedsfunktion mit dem Namen candosomething () zugänglich ist () Aus abgeleiteter Klasse? /> Die Signatur von dosomething () kann in irgendeiner Weise mit Standardparametern, jedoch nicht mit nicht standardmäßigen, in irgendeiner Weise verändert werden.
und static_assert . Dies soll deutlich machen, dass jede Art von Kompilierungsfehler, wenn dosomething () aus jeder Funktion aufgerufen wird, die keinen Namen hat, CandoSomething () ist akzeptabel
Code: Select all
class BaseClass
{
void DoSomething(){}
/*
template
friend void T::CanDoSomething();
*/
};
class SomeClassDerivedFromBaseClass : public BaseClass
{
void CanDoSomething() { DoSomething(); }
};
Code: Select all
void DoSomething(const char* caller = std::source_location::current().function_name()