Пересылка аргументов variadi c в std :: enable_if через другую функцию - PullRequest
2 голосов
/ 09 марта 2020

Следующая проблема:

#include <iostream>
#include <array>
#include <type_traits>

    using namespace std;

    template <typename... Args>
    inline constexpr size_t variadicElementCounter(Args... args)
    {
        return sizeof...(args); // get num of arguments in the parameter pack
    }

    template <typename DataType, size_t SizeValue>
    class Sth
    {
    public:
         Sth()=default;
         ~Sth()=default;

        template<typename ... VariadicValues, std::enable_if_t<(variadicElementCounter(VariadicValues...)) == SizeValue> * = nullptr>
        Sth(VariadicValues && ... f_values) noexcept : m_arr{ std::move(f_values) ...}
        {

        }

    private:
        std::array<DataType,SizeValue> m_arr;
     };

int main()
{
   // arr= {1,2,3};
    Sth<int,3> something={1,2,3};

    cout<<"Hello World";

    return 0;
}

Пример можно выполнить здесь: https://onlinegdb.com/r1Qpj67BI

Попытка скомпилировать этот класс, VariadicValues... (вероятно) нарушает компиляцию Что я делаю неправильно (потому что я хочу избежать вызова sizeof...(VariadicValues) в выражении enable_if

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...