gpt4 book ai didi

c++ - 手动选择右值或左值类型的重载函数

转载 作者:行者123 更新时间:2023-11-30 00:54:44 24 4
gpt4 key购买 nike

我有重载的方法:

    template<typename AnyType>
void AnyFunc(AnyType &t);

template<typename AnyType>
void AnyFunc(AnyType &&t);

我有一个持有指针并想使用其中一个函数的调用者:

    MyType* ptr=new MyType();
AnyFunc(*ptr);

最后一行遇到编译错误:AnyFunc 的不明确重载

如何选择我需要的功能?简单的情况是使用:

    AnyFunc(std::move(*ptr)); 

选择 void AnyFunc(AnyType &&t); 但这不是我想要的。我需要 void AnyFunc(AnyType &t); 方法。

最佳答案

任何时候你有 T&& v (其中 T 是一个模板参数),你有一个所谓的 universal reference .它不仅绑定(bind)到右值,绑定(bind)到左值。这是一个贪心模板。它会索取它能得到的任何东西,而不会返回任何东西。

在涉及贪心模板时重载是一个的主意,除非您确切地知道自己在做什么。

有了通用引用,通常不需要特例左值与右值。就std::forward<T>(v)参数和值类别将被传播。

关于c++ - 手动选择右值或左值类型的重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649061/

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