gpt4 book ai didi

c++ - 将可变参数模板参数解包到数组中,为每种类型应用函数

转载 作者:行者123 更新时间:2023-11-30 04:13:12 35 4
gpt4 key购买 nike

下面的代码有问题

template<typename... TArgs>
void SomeFunc() {
Foo* data[] = {
Func<TArgs>()..., // <- expand the pack into array but calling Func for each type
nullptr
};
}

Func 当然会返回 Foo* 实例。

最后的 nullptr 是针对 TArgs 为空的情况,这样数组的大小永远不会为零,但尽管如此,在编译代码并使用空模板参数列表实例化 SomeFunc 时,我得到:

cannot allocate an array of constant size 0

就像 nullptr 元素从来没有出现过一样。如果我将数组的声明更改为:

Foo* data[sizeof...(TArgs) + 1] = 

错误信息也变了:

Error   2   error C4789: buffer 'data' of size 8 bytes will be overrun; -4 bytes will be written starting at offset 8

我错过了什么?如果有人可以请启发我,因为我显然已经解决这个问题太久了,可能看不到这里的主要问题。

最佳答案

只是另一种寻找解决方法的尝试(对于评论来说太长了,所以我将其作为答案发布):

struct FooNull {};

template<typename T> Foo* FuncWrapper() { return Func<T>(); }
template<> Foo* FuncWrapper< FooNull >() { return nullptr; }

template<typename... TArgs>
void SomeFuncImpl() {
Foo* data[] = {
FuncWrapper<TArgs>()...
};
}

template<typename... TArgs>
void SomeFunc() {
SomeFuncImpl<TArgs...,FooNull>();
}

关于c++ - 将可变参数模板参数解包到数组中,为每种类型应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19479978/

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