если возможно, и я должен был объявить тип, только если это было невозможно. Спасибо!
вая следующий код
#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);
но это казалось ненужным.