Gui*_*cot 3 c++ decltype c++11
我想知道是否有人有相同的技巧来找到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;
}
Run Code Online (Sandbox Code Playgroud)
这是我试过的另一个镜头:
template<typename T>
struct ConvertTo {
operator T ();
}
int main() {
decltype(find_me(ConvertTo<Stuck>{})) test1;
}
Run Code Online (Sandbox Code Playgroud)
该函数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;
}
Run Code Online (Sandbox Code Playgroud)
Coliru链接:http://coliru.stacked-crooked.com/a/7eca81a13fae9de3
即使在find_me重载时它仍然有效的原因是模板参数推导将尝试每次重载find_me.如果推导成功只有一个重载,那么选择一个重载来实例化模板.
我认为这是一个纯粹的学术练习,因为按价值采用不可破坏类型的函数不能起到实际作用.
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |