если возможно, и я должен был объявить тип, только если это было невозможно. Спасибо!

вая следующий код

#include <vector>
#include <memory>

using namespace std;

class MyBase
{};

class MyDerived : public MyBase
{};

template<class Base, class Derived>
vector<Base> makeBaseVec(const Derived& obj, const typename vector<Base>::size_type size)
{
    vector<Base> out;
    for (typename vector<Base>::size_type i = 0; i < size; i++)
    {
        out.push_back(Base(obj) /* copy constructor */);
    }

    return out;
}

int main()
{
    MyDerived a;
    vector<MyBase> v = makeBaseVec<MyBase>(a, 10);
}

Живой пример

Почему я получаю ошибку

main.cpp:13:14: note:   template argument deduction/substitution failed:
main.cpp:29:41: note:   couldn't deduce template parameter 'Base'
     vector<MyBase> v = makeBaseVec(a, 10);
                                         ^

Разве компилятор не может выводить параметр шаблонаBase от типаv?

Я могу исправить это, изменив строку 27 на

vector<MyBase> v = makeBaseVec<MyBase>(a, 10);

но это казалось ненужным.

Ответы на вопрос(0)

Ваш ответ на вопрос