Deduce template argument for size of initializer list

前端 未结 2 1367
既然无缘
既然无缘 2021-01-21 03:14

I have the following (not compilable) code:

template< size_t N >
void foo( std::array )
{
  // Code, where \"N\" is used.
}

int main()
{
  f         


        
2条回答
  •  渐次进展
    2021-01-21 04:04

    If using an initializer list is not a must, you can use variadic template parameter packs:

    template
    void foo_impl(array const&)
    {
        cout << __PRETTY_FUNCTION__ << endl;
    }
    
    template
    auto foo(Vals&&... vals) {
        foo_impl({ std::forward(vals)... });
    }
    

    you'd call it as follows:

    foo(1,2,3,4,5);
    

    This defers common type checks until the initialization point of std::array (unless you add some admittedly ugly asserts), so you probably should prefer Columbo's answer.

提交回复
热议问题