我正在学习如何获得重载函数 "aggregations" : {
"players" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : 2,
"doc_count" : 2,
"maxscore" : {
"hits" : {
"total" : 2,
"max_score" : null,
"hits" : [
{
"_index" : "xxxx:scores:1487236388",
"_type" : "score",
"_id" : "AVpGMlb1XRLwiv8C2uL2",
"_score" : null,
"_source" : {
"player" : {
"id" : 2,
"name" : "Dan"
},
"score" : 12
},
"sort" : [
12
]
}
]
}
}
},
{
"key" : 1,
"doc_count" : 1,
"maxscore" : {
"hits" : {
"total" : 1,
"max_score" : null,
"hits" : [
{
"_index" : "xxxx:scores:1487236388",
"_type" : "score",
"_id" : "AVpGMlb1XRLwiv8C2uL3",
"_score" : null,
"_source" : {
"player" : {
"id" : 1,
"name" : "Dave"
},
"score" : 14
},
"sort" : [
14
]
}
]
}
}
}
]
}
}
与type
的返回值test()
。
我修改了a SO answer (by chris)的代码。
test(double)
我遇到了编译错误。
错误:没有名为' type'在' std :: result_of'
据我所知: -
#include <type_traits>
#include <utility>
int test();
double test(double x);
template<typename... Ts>
using TestType = decltype(test(std::declval<Ts>()...))(Ts...);
int main() {
std::result_of< TestType<double> >::type n = 0;
//^ ### compile error ###
using doubleDat = std::result_of< TestType<double> >::type ;
doubleDat n=0;
}
是&#34;可变参数模板&#34;。
用我自己的话来说,它就像一个包含任何参数的压缩缩写。
TestType<...>
是<{1}}函数的 id 。
TestType<double>
是test(double)
的返回类型
std::result_of<TestType<double>>::type
应为test(double)
。问题:为什么它不编译?怎么解决?
我读过这些: -
doubleDat
double
线索:经过长时间的搜索,我发现我的代码遭受了微弱的气味&#34;最令人烦恼的解析&#34;。
答案 0 :(得分:4)
查看TestType<double>
展开的内容:
test(std::declval<double>())(double)
test(std::decvlal<double>)
为double
,因此您获得了double(double)
result_of<double(double)>::type
询问您是否可以使用double
类型的参数调用double
。
答案是否定的,因为double
不可调用,所以没有嵌套类型。
您需要阅读result_of
的文档才能了解如何使用它。类型result_of<F(Arg)>::type
是使用参数F
调用Arg
的结果。如果F
可以使用参数Arg
调用,则会获得返回类型,如果它不能使用参数Arg
调用,则嵌套的type
不存在。
所以这会奏效:
using func_type = TestType<double>;
using doubleDat = std::result_of<func_type*(double)>::type;
这为类型为TestType<double>
的函数(即double(double)
)创建了一个别名,然后询问您是否可以使用类型参数调用指向该类型的指针(即double(*)(double)
) double
。你可以,type
有效。