Это легко сделать с помощью специализации :
// 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
, то вы можете использовать наследование для этого .
Для меня лучшим ответом был комментарий от pts
, если бы он только удосужился представить его в качестве ответа:
Вы правильно исследовали и ответили ваш собственный вопрос. Используйте
g ++ -pthread
, он эквивалентенg ++ -lpthread -D_REENTRANT
. Использованиеg ++ -D_REENTRANT
будет другим, он может не устанавливать все флаги компоновщика. - pts 18 мая в 0:30
Из страниц информации 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}
Флаг -pthreads gcc устанавливает необходимые флаги компилятора и компоновщика для поддержки pthreads на платформе, которую вы re on.
Вы правы, на linux x86 (и, вероятно, на многих других платформах) это эквивалентно '-D_REENTRANT -lpthread', но это не обязательно верно для всех платформ.
(По крайней мере, некоторое время на aix -pthread заставлял g ++ связываться с совершенно другим libstdc ++. А. Я не знаю, так ли это сейчас ...)