Lassen Sie uns sagen, ich habe eine Struktur Foo
und ich möchte feststellen, ob Foo
eine int
innerhalb davon hat.Ermitteln, ob Struktur hat ein Mitglied von bestimmten Typ
struct Foo { int a; char c; };
has_int<Foo>::value; // should be true
Dies ist die einfachste Form von dem, was ich eigentlich wollen würde, für einen bestimmten Typ Überprüfung:
has_type<Foo, int>::value;
Wenn ich wüsste, wie die oben genannten tun ich es, was mein Ende verwandeln könnte Ziel ist:
has_pointer<Foo>::value; // false
struct Bar { int a; void *b; };
has_pointer<Bar>::value; // true
Als für das, was ich versucht habe, ist es schwer, um loszulegen, das beste, was ich von ist der Meinung, dass, wenn ich eine Packung der in einer Struktur enthalten Typen konnte ich das schreiben konnte Rest:
template <typename... Ts>
constexpr bool any_is_pointer() noexcept {
return (... || std::is_pointer_v<Ts>);
}
Nach was ich frage scheint scheint es sehr wahrscheinlich unmöglich. Ich konnte kein Duplikat finden, aber ich war überrascht, dass ich es nicht könnte, also könnte es da draußen sein.
Dies ist unmöglich, C++ hat keine Reflexion. Es ist jedoch sehr einfach für etwas wie ein 'std :: tuple'. – Barry
Grundsätzlich wollen Sie Reflexion. C++ macht keine Reflektion. Aber ich kann mir nicht helfen, aber frage mich: Angenommen, du hast es irgendwie geschafft, 'has_int' zu implementieren - wie willst du es verwenden? Was ist das eigentliche Problem, das Sie versuchen zu lösen? –
@IgorTandetnik Ich bin in einer Situation, in der Strukturen, die Zeiger oder Referenzen enthalten, feinfühlig behandelt werden müssen. Der Punkt wäre, zu entscheiden, welche Operationen zur Kompilierzeit erlaubt sind. Ich kann es nicht wirklich in einem Detail erklären. –