Сообщение от DjDiablo
|
ну ты перегнул насчёт пяти лет помоему.
|
Если:
Сообщение от DjDiablo
|
касается основных конструкций то их можно ну скажем за неделю выучить.
|
Конечно можно и за год нахвататься опыта, но на изучение тонкостей языка и компиляторов уйдут годы. Вспомни только работу с фасетами, тредами, локалями, потоками и STL .
к примеру финт с потоками:
struct log final : public std::ostream {
public:
explicit log(const std::string &type, const std::string &file = "") :
std::ostream(new buffer(type, file)) {}
;
~log() {
delete std::ostream::rdbuf();
}
private:
struct buffer final : public std::stringbuf {
public:
explicit buffer(const std::string &type, const std::string &file) :
type (type), file (file) {}
;
~buffer() {
std::streambuf::pubsync();
}
virtual int sync();
private:
const std::string type, file;
}
;
log(const log&) = delete;
const log& operator=(const log&) = delete;
}
;
Использую для того чтобы писать красиво в лог:
using LOG_INFO = ::log;
LOG_INFO ("error", (*error)->name) << "file: " << (*file)->name;
Или еще пример:
template <typename T>
struct find_equal : std::binary_function <T, T, bool>
{
find_equal(const T &value) : value(value) {};
bool operator()(const T &left, const T &right) const {
return left == value && right == value;
}
private:
T value;
};
Используется как предикат:
file.erase(std::unique(file.begin(), file.end(), ::find_equal<char>(' ')), file.end());
Хотя сейчас std::binary_function <...> deprecated, потому что можно писать так:
file.erase(std::unique(file.begin(), file.end(), [](const char &left, const char &right) {
return left == value && right == value;
}), file.end());
Попробуй все это объяснить новичку.
Даже на самый простой вопрос чем отличаются union, struct, class не каждый ответит, особенно если не читал С++11, к примеру:
union __union final {
const int i;
};
using foo = const union ::__union;
foo un = { .i = 0 };
std::cout << un.i << std::endl; // 0
Пруф
Ну и на последок прикоюха с перечислениями:
enum __enum : int { value = 0 };
std::cout << __enum.value << std::endl; // 0
Пруф
Сообщение от DjDiablo
|
Для продакшн конечно придётся в библиотеках разбираться в том же MFC хотя бы.
|
MFC, WF, WPF, Qt и пр. boost-подобные библиотеки это уже отдельная история.
Сообщение от DjDiablo
|
Так что я несогласен с отсутствием логики.
|
Ну к примеру по какой такой логике имя функции нужно оборачивать в круглые скобки:
void *(*foo)(int *);
Я понимаю если бы там было бы обращение к другим членам класса типа:
(*parent)->method.property
Ну или здесь:
using buffer = std::istreambuf_iterator<char>;
content.assign((buffer(file)), buffer());
Сейчас я понимаю почему это сделано так, но это нужно еще принять )
Или вот приколюха из нового стандарта:
i++++++++++; // i += 5;
Ну или вместо того чтобы добавить std::lexical_cast<...>() они добавили:
stoi, stol, stoll, stoul, stoull, stof, stod, stold, to_string, to_wstring к имеющимся strtod, strtold, strtof, strtoul, strtoull, trtol, strtoll, atoi, atol, atoll
спрашивается нафига?