Если вы действительно хотите избежать # включения неприятного заголовочного файла в файл заголовка, вы можете сделать это:
hpp файл:
class MyClass
{
public:
template<typename ThrowAway>
void doesStuff();
};
cpp file
#include "MyClass.hpp"
#include "Annoying-3rd-party.hpp"
template<> void MyClass::doesStuff<This::Is::An::Embedded::Type>()
{
// ...
}
Но тогда:
Итак, да, компромиссы ...
Параллелизм о Вашем коде, делающем несколько вещей одновременно. Это обычно делается с явными "потоками", но существуют другие возможности. Например, при использовании директив OpenMP в коде тогда компилятор, что OpenMP поддержек автоматически генерирует потоки для Вас.
Поток короток для "потока выполнения". В однопоточной программе C++ выполнение запускается в основном (), и затем продолжается последовательным способом. В многопоточной программе первый поток запускается в основных, но дополнительных потоках, может быть запущен приложением, которые запускаются в определенной пользователями функции. Они тогда работают одновременно, или параллельно с исходным потоком.
В C++ 0x потоки запускаются с помощью std::thread
класс:
void my_function()
{
// do stuff
}
std::thread my_thread(my_function); // run my_function in its own thread
новый C++ 0x стандарт также поддерживает:
std::atomic<>
шаблон класса, std::mutex
, std::recursive_mutex
, и т.д.) std::lock_guard<>
, std::unique_lock<>
) std::lock
и std::try_lock
функции для управления получением нескольких блокировок одновременно, не рискуя мертвой блокировкой std::condition_variable
, std::condition_variable_any
) thread_local
ключевое слово для объявления локальных данных потока я дал более подробный обзор нового C++ 0x библиотека потока в моей статье о devx.com: Более простая Многопоточность в C++ 0x
я пишу о многопоточности и параллелизме в C++ на [1 113] мой блог . Я также пишу книгу по теме: Параллелизм C++ в Действии .
Когда Вы говорите, "как C++, новые стандарты упрощают" параллельное программирование, я предполагаю, что Вы говорите о скоро(?), чтобы быть выпущенным C++ 09 стандартов.
новый стандарт как, который это в настоящее время выдерживает в черновой форме, поддерживает следующие объекты, которые помогают с параллельным программированием:
Возможно, это видео могло бы помочь пролить некоторый свет для Вас:-)
http://channel9.msdn.com/posts/Charles/The-Concurrency-Runtime-Fine-Grained-Parallelism-for-C/
Параллелизм имеет несколько потоков выполнения для данного процесса. На сегодняшний день C++ непосредственно не поддерживает его. Однако несколько библиотек существуют, который свяжет заданную функцию с новым потоком выполнения. Стандарт Unix является pthreads библиотекой.
C++ CSP2 - Легкий Параллелизм для C++
http://www.cs.kent.ac.uk/projects/ofa/c++csp/
CSP на основе надлежащей параллельной парадигмы в противоположность потокам и блокировкам и всему другому способу вещей, которые прикрепляются на машинально.
(См. Пи Оккама для параллельного языка программирования (также на основе CSP))
Мое немного отличающееся взятие, характерное для будущих направлений парадигм программирования:
Параллелизм о записи Вашей программы, таким образом, что это может делать несколько вещей сразу если поддержка оборудования это. В настоящее время большинство языков имеет довольно тяжелые и сложные механизмы, чтобы позволить программисту определять это (например: потоки с ручной синхронизацией, директивами препроцессору OpenMP, и т.д.).
, Поскольку аппаратные средства улучшаются, они собираются улучшиться горизонтально (больше ядер), а не вертикально (быстрее одноядерный). Это означает, что приложения должны будут иметь "скрытый параллелизм" для масштабирования с "более быстрыми" аппаратными средствами. Языки в настоящее время пытаются развиться, чтобы лучше всего поддерживать это, быть в положении лучшего языка для будущей разработки.
C++ 0x добавляет больше встроенной поддержки "старых" методов программирования параллелизма. Различные поставщики компилятора добавляют "новые" методы, которые абстрагируют модель потоков и позволяют решения во время выполнения о числах потоков, и т.д. (на основе аппаратных средств машины); для Microsoft в частности, см. F#, время выполнения параллелизма, найдите что-либо подобное расширениям, и т.д.
Hope, которая помогает.