我想要一个带有默认指针到成员函数参数的模板函数。我希望我可以传递一个nullptr
默认值,因为它有一个有效的转换为指向成员的指针。在这种情况下,我希望模板参数评估为void
。然而,这失败了:
No instance of template matches the argument list
请考虑以下代码:
template <typename ReturnT, typename TypeT, typename ArgT>
void function(ReturnT(TypeT::*member)(ArgT) = nullptr)
{
if (member)
{
// Do stuff with member.
}
else
{
// Not do stuff with member.
}
}
function() // Fails
我尝试提供void
作为默认模板参数,但这也不起作用。我知道我可以使用空参数列表重载function
,但我想知道为什么这种特殊技术无法正常工作。
修改 好的,这是我实际尝试做的。我正在尝试构建一个接受两个指向成员函数参数的函数。根据它们中的哪一个设置,我希望使用成员所属的特定类型来执行不同的行为。
这样的事情:
template <
typename ReturnT,
typename TypeT,
typename ArgT
>
void function(
ReturnT(TypeT::*getter)() = nullptr,
ReturnT(TypeT::*setter)(ArgT) = nullptr
)
{
if (getter)
{
// Set getter parameters using ReturnT and TypeT.
}
if (setter)
{
// Set setter paramters using ReturnT and TypeT.
}
}