考虑以下代码:
auto f() -> decltype(auto) { /* do whatever you want here */ }
int main() { f(); }
导出返回类型,并将decltype(auto)
用作尾部返回类型
下面的代码是一个稍加修改的版本(实际上是sfinae版本):
struct S { static void f() {} };
struct T {};
template<typename U>
auto f(int) -> decltype(U::f(), void()) {
// do whatever you want here
}
template<typename>
auto f(char) -> decltype(auto) {
// do whatever you want here
}
int main() {
f<S>(0);
f<T>(0);
}
如果你参加了这个功能的考试:
template<typename U>
auto f(int) -> decltype(U::f(), void()) {
// do whatever you want here
}
问题是:是否可以使用尾随返回类型来执行sfinae,并且仍然可以推断返回类型
我指的是下面的代码(当然不起作用):
template<typename U>
auto f(int) -> decltype(U::f(), auto) {
// do whatever you want here
}
注意:我不是在寻找涉及模板参数的替代方法,我知道它们,我只是想知道这是否是一个可行的解决方案。
不是答案,而是使用void\u t的一种可能的解决方法。
至少它和你想做的一样干燥:
template<typename... Ts> struct make_void { typedef void type;};
template<typename... Ts> using void_t = typename make_void<Ts...>::type;
struct S { static int f() { return 3; } };
struct P { static int p() { return 4; } };
struct T {};
template<typename U, void_t<decltype(U::f())>* = nullptr >
auto f(int) -> decltype(auto)
{
// do whatever you want here
std::cout << "f1\n";
return U::f();
}
template<typename U, void_t<decltype(U::p())>* = nullptr >
auto f(int) -> decltype(auto)
{
// do whatever you want here
std::cout << "f3\n";
return U::p();
}
template<typename>
auto f(char) -> decltype(auto) {
std::cout << "f2\n";
// do whatever you want here
}
int main() {
std::cout << f<S>(0) << '\n';
std::cout << f<P>(0) << '\n';
f<T>(0);
}
您可以向函数添加另一个val(*)()
类型的参数,并为其分配一个带有尾随返回类型的lambda作为默认参数,以便可以通过lambda应用SFINAE:
template<typename U>
decltype(auto) f(int, void(*)() = []()->decltype(U::f(), void()) {})
{
// do whatever you want here
}
decltype(auto)
是一个不可分割的结构(几乎就像它是一个像decltype_auto
这样的关键字)。除此之外,auto
不能在decltype(x)
中用作独立的实体,因为这会阻止x
成为有效的表达式。
校验者: @片刻 翻译者: @X 模型管道化 我们已经知道一些模型可以做数据转换,一些模型可以用来预测变量。我们可以建立一个组合模型同时完成以上工作: import numpy as np import matplotlib.pyplot as plt from sklearn import linear_model, decomposition, datasets from sklearn.p
为了跨微服务跟踪服务调用,我们可以使用Zipkin。 从下面的网址,我们了解到通过微服务调用的时间可以在zipkin中捕获 https://tanzu.vmware.com/developer/guides/spring/spring-zipkin/ https://springhow.com/spring-boot-zipkin-distributed-tracing/ 我们还需要在使用zipk
istio 是由 Google、IBM、Lyft 等共同开源的 Service Mesh(服务网格)框架,于2017年初开始进入大众视野。Kubernetes 解决了云原生应用的部署问题,istio 解决的是应用的服务(流量)治理问题。
问题内容: 目前正在做一些考试,我正在努力学习一些概念。我的笔记中确实“提到”了所有这些内容,但我并不真正了解它们如何相互联系。据我了解: SOA-使服务使用者/提供者进行通信的解决方案。(据我了解,这是所有其他内容的总称) WSDL-一种描述提供程序服务的语言。 SOAP-服务用来发送消息的XML协议“包装器”。与WSDL协同工作以提供参数? REST-一种功能类似于SOAP但避免使用XML的设
问题内容: 我刚刚开始使用JSF,看起来很棒,但是我似乎无法弄清楚这最后的障碍。 我习惯了传统的Jquery AJAX函数,这在我的书中很完美。但是我希望找到一种方法使其与JSF协调工作。 这是一个说明我的情况的方案。 我的网站上有一个消息传递页面,用户可以在其中互相发送消息。所以在我的xhtml页面中,我看起来像这样: 效果很好。用户可以发布他们的消息,并将其加载到上面的对话div中。但是现在我
只是些反射型 XSS,单单发出来没有什么意义。 只是些反射型 XSS,腾讯怎么修都修不完。 只是些反射型 XSS,我想让它变得更有价值。 只是些反射型 XSS,我拿他们做成了教程。