У меня есть такой класс:
template<std::size_t T, std::size_t... Args>
class A{
public:
std::array<int,summation<Args...>::value> x;
}
, где summation
определяется как:
template<std::size_t size, std::size_t... sizes>
struct summation
{
static const std::size_t value = size + summation<sizes...>::value;
};
template<std::size_t size>
struct summation<size>
{
static const std::size_t value = size;
};
Проблема в том, что когда Args пуст (т.е. я указываю толькошаблон T
) базовый случай не работает, и я получаю сообщение об ошибке компиляции:
error: wrong number of template arguments (0, should be 1 or more)
Как изменить рекурсию summation
, чтобы также правильно обрабатывать случай, когда sizeof...(Args)==0
ивернуть значение 0 для суммирования в этом случае?Я использую C ++ 11.Спасибо
ПРИМЕЧАНИЕ. Мне бы также хотелось, чтобы это работало в многопоточной среде, где суммирование может одновременно вызываться разными потоками с разными параметрами.Какие изменения потребуются для того, чтобы это работало в многопоточной среде?Спасибо