Ich habe die folgende Klassenhierarchie: < /p>
Code: Select all
class BaseClass
{
void DoSomething(){}
/*
template
friend void T::CanDoSomething();
*/
};
class SomeClassDerivedFromBaseClass : public BaseClass
{
void CanDoSomething() { DoSomething(); }
};
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.
Code: Select all
void DoSomething(const char* caller = std::source_location::current().function_name()
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