gpt4 book ai didi

c++ - 将 nullptr 参数委托(delegate)给模板代码中的指针重载

转载 作者:太空狗 更新时间:2023-10-29 20:23:17 25 4
gpt4 key购买 nike

考虑下面的代码:

#include <iostream>

template<typename T> // generic
void f(T)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}

template<typename T> // overload for pointer types
void f(T*)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}

int main()
{
int* p{nullptr};
f(p); // correct delegation to f<T*>();
f(nullptr); // calls f<T>();
}

Live on Coliru

如您所见,调用 f(nullptr)结果是通用的 f(T)被调用,而不是指针重载 f(T*) .这很烦人。我知道为什么会这样:因为 nullptr类型为 std::nullptr_t ,通用模板具有更高的重载级别。

如何直接“解决”这个问题?我当然可以编写两种不同的实现,一种用于指针,一种用于 nullptr_t。 ,然后有一个通用的通过一些 SFINAE 分派(dispatch)到两者之一,但这看起来有点太复杂了。

最佳答案

最简单的方法可能是实现一个重载void f(std::nullptr_t),并分派(dispatch)到一个指针实现,您可以选择它,假设它做对了空指针的东西(无论正确的东西是什么):

void f(std::nullptr_t) { f(static_cast<void *>(nullptr)); }

关于c++ - 将 nullptr 参数委托(delegate)给模板代码中的指针重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com