【发布时间】:2017-07-13 08:47:35
【问题描述】:
给定以下代码
#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);
^
编译器不应该能够从v的类型推导出模板参数Base吗?
我可以通过将第 27 行更改为来纠正此问题
vector<MyBase> v = makeBaseVec<MyBase>(a, 10);
但这感觉没有必要。
【问题讨论】:
-
模板参数推导不适用于返回值。