class draw_t
{
public:
void information(...);
void center_text(...);
void colored_text(...);
void action_text(...);
void animated_bar(...);
void animated_window(...);
};
class draw_t
{
public:
class other_t
{
void information(...);
};
class text_t
{
void center(...);
void colored(...);
void action(...);
};
class animted_t
{
void bar(...);
void window(...);
};
other_t other;
text_t text;
animated_t animted;
};
g_nWheels : member of a global namespace, integer
m_nWheels : member of a structure/class, integer
m_wheels, _wheels : member of a structure/class
s_wheels : static member of a class
c_wheels : static member of a function
_t
является частью соглашения об именовании.могли бы расписать развернутый ответ на вопрос и предложить свой вариант как читабельнее и правильнее бы это выглядело
владел только той информацией, что - _t = typedef
namespace client
{
struct data_t
{
struct authorization_t
{
const char* login = nullptr, *password = nullptr;
size_t login_sz = 64, password_sz = 32;
} authorization;
const char* mac = nullptr, *proc_id = nullptr, *mbios = nullptr;
struct logged_in
{
struct subscribe_t
{
const char* product = nullptr;
int id;
const char* status = nullptr, *expired = nullptr;
};
std::vector<subscribe_t> subscribe;
} authorized;
} data;
class connection_t
{
public:
enum class status_t
{
idle,
connected,
logging_in,
logged_in,
};
void connect();
void send_data();
void receive_data();
void shutdown();
};
class request_t
{
public:
enum class auth_responses_t
{
unknown_user,
};
auth_responses_t authorization();
};
class utilities_t
{
public:
const char* get_mac();
const char* get_proc_id();
const char* get_mbios();
};
connection_t connection;
request_t request;
utilities_t utilities;
};
client
, которое ничего не выражает?struct data_t
- абсолютно никак не объясняет смысл своего существования. Слово Data не выражает ничего, оно просто говорит что внутри какой-то бессвязный белый шум из байтиков. Почему для определения типа выбрано слово struct
? Почему не class
?struct authorization_t
- словом Authorization обозначают данные уже авторизовавшегося пользователя, которому уже присвоен идентификатор сессии. У тебя в этой структуре записаны поля, которые другими людьми оформляются в термин Authentication. Разница между этими терминами даже близко не позволяет один с другим сравнивать.const char* login = nullptr, *password = nullptr;
- через запятую никогда не пишем. Каждое поле должно быть легко читаемо на своей отдельной строке. А вот таким определением полей через запятую ты ничего не добиваешься, кроме как только усложнения чтения кода. Правило 0 при написании кода - не создавать проблем для его чтения.const char* login
- константностью данных управлять нужно не так. Именно объекты типа struct authorization_t
должны наделяться свойством константности там, где это требуется. Состояние же этих объектов константным делать просто незачем.const char* login ... size_t login_sz
- при инициализации по умолчанию поле } authorization;
имеет неконсистентное и алогичное состояние. Более того, такой набор полей нельзя отнести к коду на языке C++. Эта структура написана на C. Весь набор полей нужно изменить на два поля с типом std::string
если ты хочешь писать на C++.} authorization;
- от кого ты прячешь этот код? Определение поля должно быть легко читаемым. Сейчас оно абсолютно нечитаемое. Чтобы найти это поле глазами, требуется много непозволительных для этого занятия усилий. И, опять же, это не Authorization, а Authentication. С моей т.з. такого поля в этом месте существовать вообще не должно.const char* mac = nullptr, *proc_id = nullptr, *mbios = nullptr;
- все так же, через запятую поля никогда не определяем. Более того, тут уже пошли очень странные нечитаемые и непонятные имена. mbios
- что это, акроним или именование в стиле СовКомПоМорДе (Советский Комитет По Морским Делам)? Такие имена невозможно прочитать, они не отражают смысла своего существования. Почему в authorization_t
для полей с типом const char*
есть семантическая пара size_t
, а тут - нет? Все эти поля нужно заменить на std::string
.в моем проекте практически все классы объявлены глобально. потому что вся программа в бесконечном цикле
impression
.float intension, empation, insignion, imposion;
int impresumption, impetition, inversion, illustration;
bool illusion, impretendion, imperception;
static bool notification_user_invalid = false,
notification_mismatch_username = false,
notification_mismatch_passsword = false;
;
, который находится в конце строки. Люди ждут выражений не более чем в одну строчку. Когда в конце строки находится не ;
, код снова начинает сбивать читателя с толку. В самом крайнем случае допускается разбивка арифметических выражений на несколько строк. Да и то, на ревью такой код с вероятностью 80% потребуют переформулировать в пояснительные константы. Больших арифметических выражений в коде тоже быть не должно.гнусно надругаться над принципами SOLID, прямо с первой буквы.