【发布时间】:2016-04-27 06:47:29
【问题描述】:
好的,谢谢所有看过这个的人。我已经在下面的链接中重新创建了确切的场景以便于查看,因此我将注释掉我所拥有的原始文本,因为它并不清楚。 http://cpp.sh/5lp4l
在评论部分,我展示了在没有指定调用的数据类型声明的情况下调用 make_some(32, std::string{"hi"})。我意识到这似乎很疯狂并且远远超出了我的预期用例,根据参数自动推断复合类型(推断我想要的数据,基于 int/string)不是必需的,也不是一个好主意。
【问题讨论】:
-
对于
QueryResult<int, int>,底层boost::optional模板参数是什么?或者换句话说,如果QueryResult只是boost::optional的一个包装器,它怎么会有多个模板参数呢? -
请发MCVE 重现您所看到的编译错误。你的问题有太多的未知数(最大的一个是
QueryResult)的细节。你在somefn里面写的cmets没有任何意义。 -
return QueryResult<T>(std::forward(args));肯定是错的,应该是return QueryResult<T>(std::forward<Args>(args)...);。 -
所有的cmets都是对的。我已经发布了完整 MVE 的 URL,谢谢! cpp.sh/5lp4l
-
您假设的问题在于您认为要推断的正确类型是
Data,因为它可以由int和std::string构成。问题是,std::vector<std::string>也可以!而且你不能指望编译器检查每一种可能的类型(包括模板类型),看看它是否有一个与你的参数匹配的 ctor。
标签: c++ c++11 decltype return-type-deduction trailing-return-type