gpt4 book ai didi

c++ - 将 std::initializer_list 作为非类型模板参数传递

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:07 24 4
gpt4 key购买 nike

我对以下代码有疑问:

#include <deque>
#include <initializer_list>
#include <string>

struct EnumItem
{
inline operator int() const {
return id;
}

std::string name;
int id;
};

template <const std::initializer_list<EnumItem>& items>
class Enum
{
public:


private:
static const std::deque<EnumItem> _items;
};

template <const std::initializer_list<EnumItem>& items>
const std::deque<EnumItem> Enum<items>::_items{ items };

int main()
{
Enum<{{"0", 0}}> test;
return 0;
}

它不编译,抛出大量关于我的test 实例化的语法错误:

2>error C2059: syntax error : '{'    
2>error C2143: syntax error : missing ';' before '{'
2>error C2143: syntax error : missing '>' before ';'
2>error C2976: 'Enum' : too few template arguments
2>: see declaration of 'Enum'
2>error C2447: '{' : missing function header (old-style formal list?)
2>error C2059: syntax error : '>'

我做错了什么以及如何做对?

最佳答案

initializer_list 不是可以与非类型模板参数一起使用的类型。在 C++14 中,这些仅限于枚举、整数、各种指针、左值引用和 nullptr_t

关于c++ - 将 std::initializer_list 作为非类型模板参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37897181/

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