Ich habe einen generischen Algorithmus, der auf die Eigenschaften seines Vorlagentyps zugreifen muss. Es gibt eine Merkmalklasse, die auf die Bereitstellung dieser Merkmale spezialisiert sein kann.Vorlagenspezialisierung für private Typen
Wenn ich diesen Algorithmus innerhalb meiner Klasse verwende, möchte ich ihn mit einem privaten Typ verwenden, der in der Klasse definiert ist.
Spezialisierung kann jedoch nur innerhalb von namespace
oder einem globalen Bereich erfolgen, auf den meine Klasse nicht zugreifen kann.
class A
{
struct Secret
{};
};
template <typename T> struct Trait {};
// Inaccessible type ----vvvvvvvvv
template <> struct Trait<A::Secret> // Specialize for PRIVATE type A::Secret
{
A::Secret magic_value() { return{}; } // ERROR: 'A::Secret': cannot access private struct declared in class 'A'
};
Ist es möglich, eine Vorlage mit einem privaten Typ zu spezialisieren, zumindest in Bereichen, in denen dieser Typ zugänglich ist?
Vielleicht ist es möglich, die Spezialisierung eine friend
Klasse zu deklarieren?
Bingo! Genau das, was ich brauchte :-). Vielen Dank. –
@AdiShavit Gern geschehen. :) – songyuanyao
@AdiShavit Sie sollten diese Antwort akzeptieren, wenn es Ihr Problem gelöst hat. – Brian