我想知道是否有人有相同的技巧来找到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
。如果推导仅以一个重载成功完成,则选择该一个实例化模板。
我认为这是纯粹的学术练习,因为按值采用不可构造类型的函数无法达到实际目的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句