Очень хотелось бы (для сокращения написанного кода) в зависимости от параметра шаблона, который в общем случае может быть задан по дефолту в описании шаблона, получать НЕМНОГО отличающиеся по реализации классы
сцуть тривиального шаблона который компилируется (правда на выполнение не проверял)
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(), чтобы он был только в нужно месте, а не во всех классах ествественно.
премного буду благодарен за любую помощь )

