Pietro
Pietro

Reputation: 13222

Can `using` work without specifying template parameters?

Is it possible to use using with a template class without specifying its template parameters straight away?

#include <array>
    
using MyArray = std::array<int, 5>;
using MyArrayT = std::array;         // error: missing template arguments after 'std::array'
    
int main() {
    
    MyArray myArray1;
    MyArrayT<char, 10> myArray2;
}

P.S.: Without using preprocessor tricks...

Upvotes: 3

Views: 77

Answers (1)

wohlstad
wohlstad

Reputation: 29009

You cannot do it like that because a "normal" type alias (using statement) is aliasing a concrete type with a new name, and std::array is not a concrete type.

But you can make the type alias itself templated (syntax (2)):

#include <cstddef>  // for std::size_t
#include <array>

template <typename T, std::size_t N>
using MyArrayT = std::array<T, N>;            

Then use it like you attempted:

MyArrayT<char, 10> myArray2;

Live demo

Upvotes: 7

Related Questions