vs2013 下编译如下代码出错:
错误 4 error C2668: “component_getFactoryHelper”: 对重载函数的调用不明确
template< typename T > void component_getFactoryHelper
(char * pImplName, void* pRet, const T& s)
{
//if (pRet == nullptr)
// return s.getFactory(pImplName);
return pRet;
}
template< typename T, typename… Args > void component_getFactoryHelper
(char * pImplName, void* pRet, const T& s, const Args&… args)
{
//if (pRet == nullptr)
// return component_getFactoryHelper(pImplName, s.getFactory(pImplName), args…);
return pRet;
}
template< typename… Args > void component_getFactoryHelper
(char * pImplName, const Args&… args)
{
void* pRet = nullptr;
return component_getFactoryHelper(pImplName, pRet, args…);
}
typedef struct {
int val;
}st_t;
int main(){
int d,e,f;
component_getFactoryHelper(“test”,d,e,f);
return 0;
}
错误 4 error C2668: “component_getFactoryHelper”: 对重载函数的调用不明确
template< typename T > void component_getFactoryHelper
(char * pImplName, void* pRet, const T& s)
{
//if (pRet == nullptr)
// return s.getFactory(pImplName);
return pRet;
}
template< typename T, typename… Args > void component_getFactoryHelper
(char * pImplName, void* pRet, const T& s, const Args&… args)
{
//if (pRet == nullptr)
// return component_getFactoryHelper(pImplName, s.getFactory(pImplName), args…);
return pRet;
}
template< typename… Args > void component_getFactoryHelper
(char * pImplName, const Args&… args)
{
void* pRet = nullptr;
return component_getFactoryHelper(pImplName, pRet, args…);
}
typedef struct {
int val;
}st_t;
int main(){
int d,e,f;
component_getFactoryHelper(“test”,d,e,f);
return 0;
}
解决方案:20分
把全部 component_getFactoryHelper 的返回值都改为 void * 之后,VS2015 可以编译通过。