gpt4 book ai didi

c++ - 有没有办法 decltype 不可调用函数的结果?

转载 作者:太空狗 更新时间:2023-10-29 20:35:05 24 4
gpt4 key购买 nike

我想知道是否有人有同样的技巧来找到 find_me 函数的返回类型,而不改变它的参数。

struct Stuck {
Stuck() = delete;
Stuck(Stuck&&) = delete;
Stuck(const Stuck&) = delete;
Stuck& operator=(Stuck&&) = delete;
Stuck& operator=(const Stuck&) = delete;
};

double find_me(Stuck);

int main() {
// This obviously don't work
decltype(find_me(Stuck{})) test1;
}

这是我试过的另一个镜头:

template<typename T>
struct ConvertTo {
operator T ();
}

int main() {
decltype(find_me(ConvertTo<Stuck>{})) test1;
}

find_me 函数被重载了很多次,但从未真正实现过。我只想知道当函数具有这些形式时是否有办法找到返回类型。我知道可以接收指针或引用,这就是我已经在做的事情,但我想知道是否还有一些技巧可以使这项工作成功。

如果有,请告诉我,并告诉我为什么。

谢谢。

最佳答案

这个有效:

struct Stuck {
Stuck() = delete;
Stuck(Stuck&&) = delete;
Stuck(const Stuck&) = delete;
Stuck& operator=(Stuck&&) = delete;
Stuck& operator=(const Stuck&) = delete;
};

double find_me(Stuck);
void find_me(double);

template <typename Ret>
Ret get_stuck_return_type(Ret (*)(Stuck));

int main() {
decltype(get_stuck_return_type(find_me)) test1;
}

Coliru 链接:http://coliru.stacked-crooked.com/a/7eca81a13fae9de3

即使在 find_me 被重载时它仍然有效的原因是模板参数推导将尝试 find_me 的每个重载。如果只有一个重载推导成功,则选择那个重载来实例化模板。

我认为这纯粹是学术练习,因为按值采用不可构造类型的函数可能没有任何实际用途。

关于c++ - 有没有办法 decltype 不可调用函数的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44508675/

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