@ hop5 и @RnMss предложили использовать C ++ 11 lambdas, но если вы имеете дело с указателями, вы можете использовать их напрямую:
#include
#include
class CFoo {
public:
int m_i = 0;
void bar() {
++m_i;
}
};
int main() {
CFoo foo;
std::thread t1(&CFoo::bar, &foo);
t1.join();
std::thread t2(&CFoo::bar, &foo);
t2.join();
std::cout << foo.m_i << std::endl;
return 0;
}
выходы
2
Переписанный образец из этого ответа был бы тогда:
#include
#include
class Wrapper {
public:
void member1() {
std::cout << "i am member1" << std::endl;
}
void member2(const char *arg1, unsigned arg2) {
std::cout << "i am member2 and my first arg is (" << arg1 << ") and second arg is (" << arg2 << ")" << std::endl;
}
std::thread member1Thread() {
return std::thread(&Wrapper::member1, this);
}
std::thread member2Thread(const char *arg1, unsigned arg2) {
return std::thread(&Wrapper::member2, this, arg1, arg2);
}
};
int main() {
Wrapper *w = new Wrapper();
std::thread tw1 = w->member1Thread();
tw1.join();
std::thread tw2 = w->member2Thread("hello", 100);
tw2.join();
return 0;
}
Визуальный Профессионал Сборки является моим любимым инструментом для того, чтобы сплотить все другие инструменты. Windows только, конечно, но это интегрируется со всеми разновидностями Visual Studio и хостом инструментов тестирования, инструментов управления исходным кодом, систем отслеживания ошибок, и т.д. Это окна только, все же. Я знаю, что это не весь стек, но это - запуск.
G'day,
Мы на самом деле столкнулись с этой проблемой на сайте, где я заключал контракт ранее.
Один усаженный тип и записал инструменты, главным образом сценарии оболочки, к
Мы просто ничто не могли найти коммерчески доступным, чтобы сделать это и так усаженный Charlie и записали это в сценариях оболочки удара, и это работало на HP-UX.
аплодисменты, Rob
... { for(i in a) c++; return c }
– James Brown
25 April 2019 в 06:46
Другим вариантом может быть buildbot .
Он написан на python, но не только для приложений python. Он может выполнять любой скрипт для вашей сборки. Если вы посмотрите на их истории успеха, кажется, что существует большое разнообразие языков.
Как и в случае с любой другой задачей в C ++, я почти не хромаю из-за непрерывной интеграции. Моя установка начинается с Eclipse. Я установил его для создания файлов make для моих проектов. У меня есть скрипты ant, которые выполняют общие задачи сборки, выполняя команды make all или make clean в соответствующих файлах сборки. Эти скрипты муравьев являются частью моего проекта, и мне приходится обновлять их, когда я добавляю новую конфигурацию сборки или новую часть в систему. Но это не так уж и плохо.
Я использую CruiseControl для запуска сборок. Каждый проект (каждый из них) имеет собственный сценарий ant, который выполняет определенные задачи сборки (копирование артефактов, обработка результатов), вызывая сценарий ant проекта для выполнения сборки.
Мне пришлось использовать cppunit для тестирования и обработать результаты с помощью файла xslt, который я где-то нашел. У меня также есть неправильная метка ревизии svn на каждой сборке, потому что я не могу найти подходящую метку svn. Все, что я могу найти, - это наполовину завершенный код летней давности и люди, которые утверждают, что другие люди делают это неправильно.
Мне кажется, что CC - умирающая система, но я не нашел ничего лучше для C ++. Опять же, я также чувствую, что C ++ - умирающий язык, так что, возможно, он больше, чем это.
Мы использовали scons для непрерывной интеграции, выполняемой центральным сервером сборки. Некоторые проекты были перенесены на buildbot .
Сейчас я перехожу к рейку и рассматриваю решения, описанные в этом блоге . Фаулер упоминает, что ThoughtWorks иногда использует грабли для своих сценариев сборки в своей статье Continuous Integration .