gpt4 book ai didi

c++ - 使用数组模板参数返回

转载 作者:行者123 更新时间:2023-11-27 22:51:29 26 4
gpt4 key购买 nike

(我似乎找不到这个范式的名称,但如果可以的话,你会得到额外的赞成票!)这个模板范式用于防止数组衰减为指针:

template <size_t N>
void foo(const char (&bar) [N]);

Live Example

我们可以使用 Nfoo 的正文中缩小尺码 bar .鉴于 const char array[] = "lorem ipsum"我们用这个电话 foo(array)定义 bar作为const char (&) [12] ,以一个参数的价格有效地传递了 2 个参数。


我想使用同样的想法,但作为返回,例如:

template <size_t N>
const char (&) [N] foo(const char (&bar) [N]);

这样我就可以传递数组,并有另一个对它的引用,例如:auto result = foo(bar)

我这里的代码会产生错误:

unrecognizable template declaration/definition

这可能吗?

编辑:

为澄清起见,我希望能够返回一个函数,其结果等同于:

auto& result = bar;

这样result将是 const char (&) [*]其中 *bar 的大小.

最佳答案

C++语法很棒:

template <std::size_t N>
const char (&f(const char (&arr)[N]))[N] // take that, Lisp
{
return arr;
}

对于不那么自虐的人:

template <std::size_t N> using CarrN = const char[N];

template <std::size_t N>
CarrN<N> & f(CarrN<N> & arr)
{
return arr;
}

至于术语:我们通常说“arr is passed by reference”,尽管更有眼光的用户可能会说“作为左值传递”(并且还返回因此)。

关于c++ - 使用数组模板参数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36842058/

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