Очень хотелось бы (для сокращения написанного кода) в зависимости от параметра шаблона, который в общем случае может быть задан по дефолту в описании шаблона, получать НЕМНОГО отличающиеся по реализации классы
сцуть тривиального шаблона который компилируется (правда на выполнение не проверял)
using guard = unique_lock<mutex>;
template <typename Cmd_t> class TQueue
{
private:
const uint8_t maxQ;
deque<Cmd_t> dqQ;
mutex mtx;
public:
TQueue(uint8_t lQueue)
: maxQ(lQueue)
{ }
~TQueue()
{
if (!dqQ.empty())
dqQ.clear();
}
uint8_t Put(Cmd_t cmd);
uint8_t Get(Cmd_t & cmd);
};
template <typename Cmd_t> uint8_t TQueue<Cmd_t>::Put(const Cmd_t cmd)
{
uint8_t rt = 0;
{
guard g(mtx);
rt = dqQ.size();
if (rt < maxQ)
{
dqQ.push_back(cmd);
rt++;
}
}
return rt;
}
пытаюсь что то эдакое туда засунуть
template <typename Cmd_t, sem_t * psem = NULL> class TQueue
gcc ругается
error: could not convert template argument ‘0l’ to ‘sem_t*’
а еще как бы в реализации Put проверить пришедший параметр psem на нулл и если нет, то вставить соответственно туда sem_post(), чтобы он был только в нужно месте, а не во всех классах ествественно.
премного буду благодарен за любую помощь )