Несколько возможных шаблонов в классе - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь создать класс, который можно создать с помощью типа или массива.Я не уверен, что шаблоны - лучший способ сделать это, но я думал, что они могут работать.В приведенном ниже примере кода у меня есть класс, у которого есть два статических метода, которые оба возвращают экземпляр класса на основе заданного им шаблона:

template<class T>
template<class A, size_t N>
class Foo {
    static A[N] bar();
    static T bar();
}

template<class A, size_t N>
Foo<A[N]> Foo<A[N]>::bar();

template<class T>
Foo<T> Foo<T>::bar();

Так что я могу вызвать их так:

Foo<int[5]> intarrthing Foo<int[5]>::bar();
Foo<int> intthing Foo<int>::bar();

Это не работает, потому что не все шаблоны используются, так как я могу реализовать что-то подобное?

1 Ответ

0 голосов
/ 29 января 2019

Функции не могут отличаться только типом возвращаемого значения (кроме шаблона функций).

Исходя из вашего использования, вы можете просто сделать:

template<class T>
class Foo {
    static Foo<T> bar() { return {}; }
};


Foo<int[5]> intarrthing = Foo<int[5]>::bar();
Foo<int> intthing = Foo<int>::bar();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...