Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法在采用参数包并返回向量的初始值设定项列表中直接定义lambda<;字符串>;_C++_Templates_Gcc_Variadic - Fatal编程技术网

C++ 无法在采用参数包并返回向量的初始值设定项列表中直接定义lambda<;字符串>;

C++ 无法在采用参数包并返回向量的初始值设定项列表中直接定义lambda<;字符串>;,c++,templates,gcc,variadic,C++,Templates,Gcc,Variadic,我有下面的代码,工作得很好,to_string函数接受一个参数包并返回一个字符串向量。函数中定义的lambda只是将每个参数转换为字符串(解包发生在初始值设定项列表{}): #包括 #包括 #包括 #包括 样板 自动转换为字符串(常量参数和参数)->std::vector { const auto to_str=[](const auto&p){ std::stringstream-ss; ss在评论部分添加@Justin提供的答案:Params需要传递给lambda调用: template &

我有下面的代码,工作得很好,to_string函数接受一个参数包并返回一个字符串向量。函数中定义的lambda只是将每个参数转换为字符串(解包发生在初始值设定项列表{}):

#包括
#包括
#包括
#包括
样板
自动转换为字符串(常量参数和参数)->std::vector
{
const auto to_str=[](const auto&p){
std::stringstream-ss;

ss在评论部分添加@Justin提供的答案:Params需要传递给lambda调用:

template <typename...Args>
auto to_string(const Args& ...params) -> std::vector<std::string>
{   
    return {[](const auto& p) {
        std::stringstream ss;
        ss << p;
        return ss.str();
    }(params)...};
}
模板
自动转换为字符串(常量参数和参数)->std::vector
{   
返回{[](常量自动&p){
std::stringstream-ss;

ss在评论部分添加@Justin提供的答案:Params需要传递给lambda调用:

template <typename...Args>
auto to_string(const Args& ...params) -> std::vector<std::string>
{   
    return {[](const auto& p) {
        std::stringstream ss;
        ss << p;
        return ss.str();
    }(params)...};
}
模板
自动转换为字符串(常量参数和参数)->std::vector
{   
返回{[](常量自动&p){
std::stringstream-ss;

ss显而易见的建议是只使用第一个版本,无论如何它更容易阅读…当你内联lambda时,你没有将
params
作为参数传递给lambda…@Justin我想这足够好了。我完全同意这些评论,但我正在尝试正确的语法。有什么建议吗?编辑:在Ted answ之前写这篇文章呃,这就解决了!(我理解贾斯汀在回答这个问题时说的话)谢谢:)@bogdan_ariton:“解决方案”进入回答部分,而不是问题。这不是一个网络论坛;回答问题对你来说没问题,但它需要放在正确的地方。明显的建议是只使用第一个版本,反正它更容易阅读…你内联lambda时没有将
params
作为参数传递给lambda…@Justin这很好我想是h的答案。我完全同意这些评论,但我正在尝试正确的语法。有什么建议吗?编辑:在Ted回答之前写下这个,这就解决了问题!(我理解贾斯汀在回答这个问题时说的话)谢谢:)@bogdan_ariton:“解决方案”进入回答部分,而不是问题。这不是一个网络论坛;回答你的问题对你来说是可以的,但它需要放在正确的地方。
test.cpp: In function 'std::vector<std::__cxx11::basic_string<char> > 
to_string(const Args& ...)':
test.cpp:13:8: error: expansion pattern '<lambda>()' contains no parameter packs
   13 |     }()...};
      |        ^~~
test.cpp:13:11: error: could not convert '{<expression error>}' from '<brace-enclosed initializer list>' to 'std::vector<std::__cxx11::basic_string<char> >'
   13 |     }()...};
      |           ^
      |           |
      |           <brace-enclosed initializer list>
template <typename...Args>
auto to_string(const Args& ...params) -> std::vector<std::string>
{   
    return {[](const auto& p) {
        std::stringstream ss;
        ss << p;
        return ss.str();
    }(params)...};
}