Специализация шаблонного класса с другим числом шаблонных параметров

Рейтинг: 2Ответов: 1Опубликовано: 03.08.2023

Есть такой шаблонный класс c двумя параметрами:

template <class T1, class T2>
class A
{
public:

    void f()
    {
        t1 = t2.get();
    }

    T1 result() {return t1;}
private:
    T1 t1;
    T2 t2;
};

Есть ли возможность написать специализацию этого класса для одного параметра шаблона, что-то вроде такого:

template<class T1> 
class A<T1>
{

    void f() {/*do nothing*/}
    T1 result() {return t1;}

public:
    T1 t1;
};

но в таком виде это не работает, компилятор требует два аргумента.

Можно сделать так:

template<class T1> 
class A<T1, void>
{

    void f() {/*do nothing*/}
    T1 result() {return t1;}

public:
    T1 t1;
};

Но мне не нравится при использовании писать void:

A<int, void> a;

Хотелось бы писать просто

A<int> a;

Ответы

▲ 3Принят

А вот такой вариант не пройдет?

template <class T1, class T2 = void>
class A
{
public:
......

template<class T1> 
class A<T1, void>
{
public:
......

И вызываете

A<int> a;
A<int,int> b;