gpt4 book ai didi

c++ - 作为模板参数的结构数组

转载 作者:太空狗 更新时间:2023-10-29 21:47:13 27 4
gpt4 key购买 nike

我正在尝试将一个指向 struct 数组的指针作为模板参数传递。一段时间后我设法做到了:

struct something{};

constexpr const something single;
constexpr const something array[12];
template<const something* arg> void f() {}

template<typename T>
constexpr T* workaround(T* v){
return v;
};

void bind(){
f<&single>(); //OK
f<array>(); //NO
f<&array>(); //NO
f<&array[0]>(); //NO
f<workaround(array)>(); //NO
f<(const something*)array>(); //OK
}

这是数组不能透明地用作指针的罕见情况之一,还是编译器错误?

最佳答案

我实际上相信最简单的调用形式,f<array>(); , 如果只有你 declare-define array 才有效正确:

struct Elem
{ };

constexpr const Elem array[5] { {} , {} , {} , {} , {} };

template<const Elem* arg> void f()
{ }

int main()
{
f<array>();
return 0;
}

我唯一改变的地方(除了将数组从 12 个元素减少到 5 个元素之外)是为 array 添加了一个初始化程序。 .

(这是为我编译的,使用 GCC 4.7.2。)

关于c++ - 作为模板参数的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576349/

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