#c #local-class
Вопрос:
У меня есть функция с именем return_local
, в которой она возвращает экземпляр локального класса, заключенный в лямбду.
auto return_local() {
return [] {
static int sample { 5 };
struct Point {
int x, y;
int show_sample() { return sample; }
};
return Point {};
}();
}
using Point = decltype(return_local());
Теперь я могу использовать Point
в качестве псевдонима с характеристиками локальных классов.
Point p {.x = 4, .y = 1};
p.show_sample(); // returns 5
Является ли этот код нормальным? Есть ли какие-либо преимущества в использовании этого «просочившегося» класса?
Комментарии:
1. Вы можете это сделать, но непонятно, зачем вам это нужно. Почему бы просто не определить
Point
область пространства имен?2. Это немного необычно, но код находится в пределах того, что я бы счел нормальным. Я не вижу никаких преимуществ в таком кодировании по сравнению с самостоятельным объявлением точки и тем, чтобы образец был статической переменной класса. Недостатком, как я вижу, является большая когнитивная нагрузка на техническое обслуживание.
3. Это иногда называют «Типом Волдеморта» (Тип, который не должен быть назван).