Мне нужен-D_REENTRANT с-pthreads?

Это легко сделать с помощью специализации :

// The "base" generic case
template<typename T>
class Table_Inside;

template<>
class Table_Inside<char>
{
    // Special implementation for characters
};

template<>
class Table_Inside<int>
{
    // Special implementation for integers
};

template<typename T>
class Table
{
    Table_Inside<T>* tmp;
};

Если вам нужна общая функциональность, совместно используемая классами char и int, то вы можете использовать наследование для этого .

39
задан jww 31 August 2017 в 13:59
поделиться

3 ответа

Для меня лучшим ответом был комментарий от pts , если бы он только удосужился представить его в качестве ответа:

Вы правильно исследовали и ответили ваш собственный вопрос. Используйте g ++ -pthread , он эквивалентен g ++ -lpthread -D_REENTRANT . Использование g ++ -D_REENTRANT будет другим, он может не устанавливать все флаги компоновщика. - pts 18 мая в 0:30

17
ответ дан 27 November 2019 в 02:53
поделиться

Из страниц информации gcc:

`-pthread'
     Adds support for multithreading with the "pthreads" library.  This
     option sets flags for both the preprocessor and linker.

Так что достаточно просто флага -pthread. Однако я бы не рекомендовал передавать его только в часть вашего кода.

Как предположил Крис в комментариях, использование gcc -dumpspecs в Linux действительно подтверждает, что он также устанавливает флаги препроцессора:

%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
7
ответ дан 27 November 2019 в 02:53
поделиться

Флаг -pthreads gcc устанавливает необходимые флаги компилятора и компоновщика для поддержки pthreads на платформе, которую вы re on.

Вы правы, на linux x86 (и, вероятно, на многих других платформах) это эквивалентно '-D_REENTRANT -lpthread', но это не обязательно верно для всех платформ.

(По крайней мере, некоторое время на aix -pthread заставлял g ++ связываться с совершенно другим libstdc ++. А. Я не знаю, так ли это сейчас ...)

5
ответ дан 27 November 2019 в 02:53
поделиться