gpt4 book ai didi

c++ - 可变参数模板数组引用参数的语法是什么?

转载 作者:可可西里 更新时间:2023-11-01 18:28:33 24 4
gpt4 key购买 nike

我不知道我遇到的是编译器错误还是我只是不知道我正在尝试做的事情的语法。想象一个接受 2 个数组引用的函数:

void takeArrays(const char (&str1)[4], const char (&str2)[4]) {
}

调用时编译正常:

takeArrays("foo", "bar");

我为什么要这样做?因为路过const char*丢失了字符串文字的大小信息,这对我正在做的事情很重要。

然而,我真正想做的是传递可变数量的数组引用。这是事情变得有点丑陋的地方(变得更糟)。我天真地尝试了这个:

template<typename... Args>
void takeArrays(const char (&Args... strs)[4]) {
}

得到"error: variable or field ‘takeArrays’ declared void""error: expected primary-expression before ‘const’" (海合会 4.6)。所以我尝试了这个:

template<typename... Args>
void takeArrays(const char (&(Args... strs))[4]) {
}

得到"no matching function for call to ‘takeArrays(const char [4], const char [4])’""candidate is template<class ... Args> void takeArrays(const char (& (*)(Args ...))[4])" .这是不可读的,但似乎接近我想要的。我尝试了很多变体,但似乎无法编译。

假设有一个正确的方法来写上面的内容,我真正想做的是调用:

takeArrays("foo", "foobar", "longerstring");

并获取不同大小数组的可变列表,即上面的调用应该由编译器扩展为:

void takeArrays(const char (&str1)[4], const char (&str2)[7],
const char (&str3)[13]);

这是我尝试做的第一个想法,我的尝试是这样的:

template<size_t... Sizes>
void takeArrays(const char (&strs)[Sizes]...);

不用说,我得到的只是错误消息。我知道我正在尝试做的事情有点疯狂,但我真的很想知道这是否可能,如果可能的话,合适的语法是什么。提前致谢。

最佳答案

相同元素类型的可变数组的语法是:

template<size_t... Sizes>
void takeArrays(const char (&...args)[Sizes]);

这类似于一般的可变参数 const 引用语法:

template<typename... Args>
void takeArrays(const Args &...args);

一个容易记住的方法是省略号紧跟在参数名称之前。

关于c++ - 可变参数模板数组引用参数的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13256231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com