nullptr作为传递给模板函数的默认指针到成员函数参数

时间:2018-03-02 00:38:53

标签: c++

我想要一个带有默认指针到成员函数参数的模板函数。我希望我可以传递一个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.
    }
}

0 个答案:

没有答案