我收到错误 C2988(无法识别的模板声明/定义),光标在 *method 参数之前提示。
namespace Bind
{
template <typename ModelClass, typename ReturnType>
static std::unique_ptr<Binding>
Get (ReturnType (ModelClass::*method)(),
const String& source,
const Symbol& aspect = {})
{
// whatever
return nullptr;
}
// ....
}
示例实例化: Function WhateverClass::whateverMemberFunction() 返回 ReturnType 并且不带任何参数。模板参数 ModelClass 和 ReturnType 都应该从这个实例化中推导出来:
Bind::Get(&WhateverClass::whateverMemberFunction, "")
该模板可以在 Xcode (Apple) 上正常编译,但在 MSVC 2019 上编译失败。两者都使用 C++17 标准。
我错过了什么?
这绝对是一个 msvc bug。当参数之一是成员指针类型时,MSVC 似乎在使用
{}
作为默认值时遇到问题。
您可以将
{}
更改为Symbol{}
,如下所示:
Get (ReturnType (ModelClass::*method)(), const String& source,
//---------------------vvvvvv---->changed to this
const Symbol& aspect = Symbol{})
{
}