为什么此代码失败
错误C2893:无法专门化功能模板''unknown-type' makeAndProcessObject(const Builder&)'
我正在使用MSVC2012
class BBuilder
{
public:
int makeObject()
{
return 22;
}
};
template <typename Builder>
auto
makeAndProcessObject (const Builder& builder) -> decltype( builder.makeObject() )
{
auto val = builder.makeObject();
// do stuff with val
return val;
}
int main()
{
BBuilder myobj;
auto retval = makeAndProcessObject(myobj);
return 0;
}
(直播example)
答案 0 :(得分:8)
你的函数makeObject
应该是const,因为你试图在constant object
上调用这个函数,然后一切正常。 example
答案 1 :(得分:2)
问题在于
makeAndProcessObject (const Builder& builder) receives a const builder
但是makeObject()函数不是const !!所以不能推断回报...... 你可以删除const限定符或make makeObject const,这样就可以找到函数:
int makeObject() const
{
return 22;
}
答案 2 :(得分:2)
因为makeAndProcessObject函数正在采用常量引用对象所以它无法访问非常量成员函数(builder.makeObject())。将makeObject()转换为常量成员函数[Ex:int makeObject()const]或在builder.makeObject()模板函数中使用非常量对象[ex:makeAndProcessObject(Builder&amp; builder)]
此致 Shivakumar宣读