• Что нужно знать, на будущее, о среде .NET?

    Razaz
    @Razaz
    Asp.Net junkie
    Вообще .Net давно работает на Nix*. Просто имплементация стандарта не поддерживалась MS официально.
    Вот тут списочек : Mono Software Showcase.

    Сейчас MS меняет свою политику по части инструментов и тд. и будет официально поддерживать свою реализацию платформы на Win, Mac и Linux.
    Вот страничка CoreFx - https://github.com/dotnet/corefx. Как видите билды на Linux уже проходят.
    А вот CoreClr - https://github.com/dotnet/coreclr. Там уже и на Маке подняли билды.

    А нужно многим. Например, я бы рад сделать продукты кроссплатформенными, но от Java глаза вытекают(особенно после C#6), Scala - слишком нишевая, интерпретируемые я не люблю(производительность, нет статической типизации и тд- просто личное предпочтение). Вот и остается только C#/.Net. Ну и не я один такой)

    Если откинуть хэйтинг МС отдельными личностями - то ИМХО C#/.Net сейчас наиболее перспективный и интересный тулсет.
    Ответ написан
    2 комментария
  • Как понять заголовочные файлы?

    @Mercury13
    Программист на «си с крестами» и не только
    #include — как ни странно.

    Вы так и не поняли такой вещи, как «единица компиляции». Дело в том, что в Си c-файлы компилируются независимо друг от друга (в единую программу всё собирает линкер). А чтобы сказать «оно есть, только в другой единице компиляции», используют прототипы и extern’ы.

    А если вы хотите просто внести код в ту же единицу компиляции, просто пишите его в хедере, да и всё. Только в большинстве компиляторов это исключает предкомпилированные хедеры — а ТАКИЕ хедеры вам предкомпилировать, скорее всего, и не нужно.

    <брюзга mode on>
    Не создают кода (а значит, в традиционной системе с кучей единиц компиляции находится именно в хедерах)
    • extern и прототипы
    • inline
    • не до конца специфицированные шаблоны
    • static-поля в классе (но потом это static-поле придётся повторить в какой-нибудь одной единице компиляции)
    • может, ещё что-то, только я забыл…
    <брюзга mode off>
    Ответ написан
    1 комментарий
  • Как перейти с Windows на Linux для работы с C++?

    @Eddy_Em
    Быстро не получится.
    Сначала почитать пару-тройку книжек про то, как вообще в линуксе работать. Еще неплохо бы Advanced Bash Scripting почитать. Получается, минимум полгода уйдет на литературу.
    Далее обкладываемся гентушными хэндбуками, гуголом и т.п. и ставим генту.
    Помаленьку настраиваем и через год-два уже на мастдайку вообще не потянет! Главное — понять суть UNIX-way, тогда станет ясно, что мастдайка — это даже не гнилая операционная система, а некачественная прошивка для игровых приставок!
    Ответ написан
    1 комментарий
  • Как грамотно построить архитектуру базы для логов?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Если данные однородны и все чаты одинаковы - первое. Если есть вероятность, что набор сохраняемого для разных чатов будет различным - второе.
    Ответ написан
    Комментировать
  • Segfault, не могу найти ошибку, что надо исправить(C++)?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    @#$%^#$%^$%^&@#$%^

    Вы сайтом ошиблись, это надо на говнокод постить.

    #define вместо констант - лажа, но допустимая.

    Rainberd углядел, что в самопальной сортировке классическая "ошибка копипаста". Посмотрите внимательно на вложенный цикл, там условие должно быть j<n, а у вас - i < n Это сегфолт номер раз.

    А вот это - причина сегфолта номер два:
    char *str_pr = &str[0u];
    char *quality=&str2[0u]   ;

    В версиях до C++11 нет никаких гарантий, что это дело указывает на массив всех символов строки.
    В любых версиях нет никаких гарантий, что этот адрес будет неизменным в течении жизни строки.

    Кто надоумил вас использовать функционал библиотеки C для работы со строками, да еще и смешивать его с STL?

    Самопальная сортировка - тоже ужас. Этот код проще переписать, чем рефакторить.
    int i;
    for(i=....

    Откройте для себя объявление индекса внутри цикла:
    for(size_t i=0...

    Откройте для себя, что массивы должны индексироваться при помощи size_t, а не int.

    Тут в большинстве своем код на C, с операторами C++ в некоторых местах. Печать структур просится, например, в виде дообъявления оператора << у ofstream.

    Если это студенческая работа, преподавателя, который "подготовил" такого студента нужно лишить конфет и поставить в угол.
    Ответ написан
    8 комментариев
  • Как в С++ использовать несколько методов к объекту как в JavaScript?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    В C++ это будет вызов метода method2() у того, что вернул method1().

    А вы что хотите? Чтобы method2() вызывался у object? тогда метод1 должен возвращать ссылку на *this.

    #include <iostream>
    #include <stdexcept>
    #include <iomanip>
    using namespace std;
    
    
    struct vantuz
    {
       vantuz& push();
       vantuz& pull();
       vantuz();
    private:
       bool pushed;
    };
    
    vantuz::vantuz():pushed(false)
    {
    }
    
    vantuz& vantuz::push()
    {
            if(pushed)
            {
                  throw logic_error("already pushed!");
            }
            pushed=!pushed;
            cout<<"push! ";
            return *this;
    }
    
    vantuz& vantuz::pull()
    {
        pushed=!pushed;
        if(pushed)
        {
              throw logic_error("already pulled!");
        }
       cout<<"pull! ";
       return *this;
    }
    
    int main()
    {
       try
       {
          vantuz v;
          v.push().pull().push().pull().push().pull().push().push();
       }
       catch(logic_error& ex)
       {
       	  cout<<endl<<setw(20)<<setfill('@')<<' '<<"Runtime error!"<<setw(20)<<setfill('@')<<' '<<endl<<ex.what()<<endl;
       	  throw;
       }
       return 0;
    }

    Потыкать на ideone
    Ответ написан
    3 комментария
  • Каким алгоритмом можно проверить Большое число на простоту?

    @SeptiM
    Расклад примерно такой. Пусть n -- длина числа, т.е. обычный перебор работает за 2^{c * n}.

    1) Вероятностный тест Рабина-Миллера можно реализовать за O(k n^2 log n), где k -- число попыток. Вероятность ложноположительной ошибки 4^-k. При k=100 это значение настолько безумно мало, что скорее в вашей программе найдется критический баг, процессор сделает ошибку в вычислениях и взломщик выиграет в лотерею и все это одновременно, чем число окажется составным.

    2) Детерминированный AKS (en.wikipedia.org/wiki/AKS_primality_test). Работает за O(n^{6 + eps}). Интересен скорее теоретически.

    3) Эллиптический тест на простоту (en.wikipedia.org/wiki/Elliptic_curve_primality). Эмпирически работает за O(n^5). Интересен тем, что в случае успеха возвращает сертификат простоты.
    Ответ написан
    2 комментария
  • Почему не работает событие (C#)?

    AxisPod
    @AxisPod
    C# это не PHP, тупо начать писать не прочитав ни одной книги не получится.
    Ответ написан
    6 комментариев
  • Какую C++ библиотеку для работы с сокетами посоветуете?

    AxisPod
    @AxisPod
    libev, libevent, libuv, boost::asio
    Ответ написан
    Комментировать
  • Как сделать программу генерация предложений?

    @vilgeforce
    Раздолбай и программист
    как сделать будет лучше написать как не работает.
    Ответ написан
    Комментировать
  • Вопрос касательно C#?

    using System;
    using System.Collections.Generic;
    
    namespace ListKeyValuePair
    {
    	class Program
    	{
    		public static void Main(string[] args)
    		{
    			List<KeyValuePair<string, string>> lkvp = new List<KeyValuePair<string, string>>();
    			
    			lkvp.Add(new KeyValuePair<string,string>("pdo", "somedata"));
    			lkvp.Add(new KeyValuePair<string,string>("for", "somedata1"));
    			
    			foreach (KeyValuePair<string, string> kvp in lkvp)
    			{
    				
    				Console.WriteLine("Key= {0}, Value= {1}", kvp.Key, kvp.Value);
    			}
    			
    			Console.Write("Press any key to continue . . . ");
    			Console.ReadKey(true);
    		}
    	}
    }

    как можно сделать чтобы можно было вводить
    data["for"]toString() чтобы возвращала somedata1

    если хотите именно так - используйте словарь (класс Dictionary), пример:
    public static void Main(string[] args)
    		{
    			Dictionary<string, string> dictionary = new Dictionary<string, string>();
    		
    			dictionary.Add("cat", "animal");
    			dictionary.Add("shark", "fish");
    			
    			Console.WriteLine(dictionary["cat"]);	
    			Console.ReadKey(true);
    		}
    Ответ написан
    Комментировать
  • С чего начать изучать C#?

    God-emperor
    @God-emperor
    create a golden path
    Мне понравилась книга Эндрю Троелсона. Как мне кажется - подойдёт
    Ответ написан
    1 комментарий
  • Можно ли перегружать базовые типы в С++?

    @MiiNiPaa
    Нет, нельзя. В вашем случае можно написать свой компаратор и передать его шаблонным параметром в ваше дерево.
    Если оно не поддерживает кастомных компараторов, добавьте поддержку, это очень полезно.
    Ответ написан
    3 комментария
  • Как сделать копию структуры?

    Ocelot
    @Ocelot
    Забыли задать размерности для второй матрицы. Элементы копируются, а свойства n и lines - нет.
    Ответ написан
    Комментировать
  • Как работать со статическими ссылками в C++?

    Adamos
    @Adamos
    Лучше переделайте на такой вариант:
    static QSqlDatabase* getPDB()
    {
      static QSqlDatabase *pdb = NULL;
      if(pdb == NULL) {
        pdb = connect();
      }
      return pdb;
    }

    Ну, соответственно, connect должно создавать это самое соединение и возвращать тот самый указатель.
    И никаких глобальных членов класса...
    Ответ написан
    3 комментария
  • Как работать со статическими ссылками в C++?

    maaGames
    @maaGames
    Погроммирую программы
    QSqlDatabase * DB::pdb = NULL;
    Ответ написан
    Комментировать
  • Зачем нужны Dependency containers?

    FirstX
    @FirstX
    .net developer
    Для того, чтобы отделить мух от котлет.

    Представь, что у тебя условно есть 3 отдела. И все они между собой очень тесно связаны. Ну не могут работать друг без друга и все тут. В итоге захотел поменять что-то во втором отделе, будь добр поменяй и в остальных двух, ибо они от него напрямую зависят.

    Первое, что приходит в голову - создание абстрактных интерфейсов, через которые все взаимодействие и происходит. Ок, создали. Но абстрактные интерфейсы делать ничего не могут, на то они абстрактные. Значит где-то нужно явно создавать реализацию для этой абстракции. Становится вопрос где это делать. Создавать внутри одного класса - экземпляры другого, это уже тоже сильная связанность между ними. Для этого и придумали ящик, где будут храниться все соответствия между интерфейсами и реализациями. Захотел получить реализацию такого-то интерфейса, попросил ответственного менеджера, он сам заглянул в свой ящик и вытащил то, что тебе требуется. И назвали это все Контейнер Зависимостей (Dependency Container). То есть это конкретный инструмент для создания слабых связей между модулями.

    Ну а слабая связанность модулей и абстракции между ними дают всякие полезные фишки по типу быстрого переключения между реализациями (например реальное/тестовое окружение), позволяет проще рефакторить отдельные модули и так далее.
    Ответ написан
    Комментировать
  • Почему метод GetEnumerator() интерфейса IEnumerable реализовывается дважды?

    FirstX
    @FirstX
    .net developer
    Для ответа на этот вопрос надо окунуться в историю. А именно был момент, когда не было Generic-типизации и был только нетипизированный интерфейс перечисления IEnumerable. А потом с приходом новой версии .Net появились обобщения (это когда явно указывается тип <T>, в твоем случае тип данных <Product>).

    Сигнатура этого интерфейса выглядит следующим образом:
    public interface IEnumerable<out T> : IEnumerable

    То есть для обратной совместимости, новый интерфейс наследует старый, а значит и метода нужно реализовать два: один, который возвращает старый нетипизированный вариант, и новый, более удобный типизированный вариант.

    Для понимания: в старом варианте, когда ты обходил в цикле каждый элемент через foreach - тип элемента был object (все другие типы от него унаследованы). И на каждой итерации, чтобы получить свой тип Product и работать с ним - приходилось делать приведение типов.
    В новом варианте, благодаря тому, что явно указан тип <Product> при обходе в цикле - ты сразу получаешь объект типа Product.

    Рекомендую по этой теме почитать вообще изменения в .Net при переходах с версии на версию + почитать про Generic в дотнете.
    Ответ написан
    Комментировать
  • Как научиться программировать, если доступен лишь браузер?

    Kublyakov
    @Kublyakov
    https://c9.io/ - мощная онлайн IDE в браузере. Для практики, при изучении веб технологий подойдет отлично.
    Ответ написан
    Комментировать