Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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++ 将参数传递给另一个变量函数_C++_Parameter Passing_C++17_Ellipsis_Variadic - Fatal编程技术网

C++ 将参数传递给另一个变量函数

C++ 将参数传递给另一个变量函数,c++,parameter-passing,c++17,ellipsis,variadic,C++,Parameter Passing,C++17,Ellipsis,Variadic,有没有任何方法可以让这段代码按照预期进行编译和工作,而不必求助于va_list之类的东西 #include <iostream> void fct(void) { std::cout << std::endl; } void fct(int index, int indexes...) { std::cout << index << ' '; fct(indexes); //or fct(indexes...); ? }

有没有任何方法可以让这段代码按照预期进行编译和工作,而不必求助于
va_list
之类的东西

#include <iostream>

void fct(void)
{
    std::cout << std::endl;
}

void fct(int index, int indexes...)
{
    std::cout << index << ' ';
    fct(indexes); //or fct(indexes...); ?
}

int main(void)
{
    fct(1, 2, 3, 4, 5, 6, 7);
    return 0;
}
#包括
无效fct(无效)
{

我怀疑你误解了签名的意思

void fct (int index, int indexes...)
我猜想你认为
fct()
期望一个
int
单值(
index
)和一个
int
的可变列表(
indexex…
)以及C++11风格的参数包扩展

否:

所以两个
int
单个值和一个C风格的可选参数,只能通过
va_list
使用

如果您不相信,请尝试仅使用整数参数调用
fct()

fct(1);
对于变量版本的
fct()
,您应该获得类型为“error:no matching function for call to'fct'”的错误,类型为“note:candidate function not available:需要至少2个参数,但提供了1个”

如果希望接收可变参数列表并递归地将参数传递给同一个函数,可以使用模板可变方式

以身作则

template <typename ... Ts>
void fct(int index, Ts ... indexes)
{
    std::cout << index << ' ';
    fct(indexes...);
}
模板
无效fct(整数索引、Ts…索引)
{
如果你真的不喜欢模板的想法,我想你可以像这样作弊:

#include <iostream>
#include <vector>

void fct(std::vector<int>&& _indices)
{
    for (auto&& i : _indices)
    {
        std::cout << i << ' ';
    }
    std::cout << std::endl;
}

int main(void)
{
    fct({1, 2, 3, 4, 5, 6, 7}); // Note the curly braces
    return 0;
}
#包括
#包括
无效fct(标准:向量和指数)
{
对于(自动和i:_索引)
{

std::你有没有考虑过让
fct
成为一个可变模板函数?这将如何解决我的问题?这不会毫无意义地使事情复杂化吗?到目前为止,我试图实现的似乎非常简单。事实是,我不能在这里使用可变模板,因为我已经这样做了。上面的代码非常简单,可以触及问题的核心m、 但是我正在处理的真正代码有一个std::size\u t可变模板。我想在没有模板的情况下解决这个问题。我不确定我是否遵循了。为什么你不能将其作为模板?@cantordust我在这里提出了我的问题:也许会加入一个
void fct(){std::cout感谢您的回复。换句话说,没有模板和
va_list
:\@Pippin-不,据我所知。或者更好:方法(从C++11开始)是可变模板吗?对于你来说,我不明白可变模板的方式有什么不对。@max66我在这里提出了我的问题:@Pippin-正如你在我的新问题答案中所看到的,可变模板的使用非常简单。
#include <iostream>
#include <vector>

void fct(std::vector<int>&& _indices)
{
    for (auto&& i : _indices)
    {
        std::cout << i << ' ';
    }
    std::cout << std::endl;
}

int main(void)
{
    fct({1, 2, 3, 4, 5, 6, 7}); // Note the curly braces
    return 0;
}