Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将nullptr参数委托给模板代码中的指针重载_C++_Templates_C++11_Nullptr - Fatal编程技术网

C++ 将nullptr参数委托给模板代码中的指针重载

C++ 将nullptr参数委托给模板代码中的指针重载,c++,templates,c++11,nullptr,C++,Templates,C++11,Nullptr,考虑以下代码: #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 << __PRET

考虑以下代码:

#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>();
}
#包括
模板//通用
空隙f(T)
{

std::cout最简单的方法可能是实现一个重载
void f(std::nullptr\u t)
,并分派到一个指针实现,该实现可以由您选择,假设它对空指针做了正确的事情(无论正确的事情是什么):

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

std::nullptr\u T
没有它所指向的类型时,你怎么能期望调用
T*
重载?我想你真的需要为这种情况使用单独的逻辑,所以你最好添加第三个重载。@Brian我不期望
f(T*)
要被调用,我希望不太麻烦地获得这种行为。当您调用
f(T*)时,您希望
T
是什么
?我的意思是@cicto所说的。谢谢你比我说的更好。哦,我明白你的意思了……这确实是一个我没有想到的好观点。所以看起来第三次过载是应该的。