das Betrachten following code:decltype in Klassenmethode Erklärung: Fehler, wenn vor "referenziert" Element verwendet wird erklärt
struct test {
auto func() -> decltype(data) {} // ERROR
int data;
};
int main() {
test t;
t.func();
}
Es gibt den folgenden Fehler:
main.cpp:2:29: error: 'data' was not declared in this scope
auto func() -> decltype(data) {}
Wenn ich jedoch data
oben platzieren func()
, gibt es keinen Fehler aus (live code):
struct test {
int data;
auto func() -> decltype(data) {}
};
...
Und so ist meine Frage, warum ist decltype
Mitglieder nicht nach ihm deklariert (wenn decltype
in einer Methodendeklaration verwendet wird, nicht in der Definition)? Ich möchte auch wissen, ob sich dieses Verhalten in zukünftigen Iterationen des Sprachstandards ändert.
Bitte beachten Sie, dass ich dies frage, weil ich
decltype
erwartete sich anders zu verhalten. Meine Codierungskonvention besteht darin, Klassendatenelemente unterhalb der Klassenfunktionen zu platzieren. Sicher würde dieses unterschiedliche Verhalten beeinflussen, wie ich meine Klassenmitglieder organisiere. Ich wäre sehr dankbar, wenn Sie mir einen Workaround zur Verfügung stellen könnten, der meine Codierungskonventionen beibehalten würde.
Sorry - die Art von C++, geerbt von C –
Es ist nicht nur 'declltype', auch ein einfaches' typedef' zeigt das [gleiche Verhalten] (http://coliru.stacked-crooked.com/view?id=8f959fbd70b0b7d44c21ff0d71967fd5-6f7ec8a47f20223a17b26973b6e13527). Durch das Verschieben des 'typedef' über die Elementfunktionsdefinition wird das Problem offensichtlich behoben. – Praetorian
@Praetorian Also ist es ein inhärentes Problem ... Schade. –