gpt4 book ai didi

模板类中的 C++ 枚举不能用作常量值

转载 作者:行者123 更新时间:2023-11-30 03:55:18 26 4
gpt4 key购买 nike

这是代码,

#include<iostream>
using namespace std;

template <typename T>
class TestClass {
T value;
enum _SyncType {
SYNC_TYPE,
ASYNC_TYPE,
};

static const char *const kSyncString[];
};

template <typename T>
const char *const TestClass<T>::kSyncString[] = {
[TestClass<T>::SYNC_TYPE] = "sync type",
[TestClass<T>::ASYNC_TYPE] = "async type",
};

int main() {
TestClass<int> test;
return 0;
}

编译的时候提示

prog.cpp:19:1: error: the value of 'SYNC_TYPE' is not usable in a constant expression
};
^
prog.cpp:8:5: note: 'TestClass<T>::_SyncType SYNC_TYPE' is not const
SYNC_TYPE,
^
prog.cpp:19: confused by earlier errors, bailing out

我想也许模板还没有任何实例,但是我应该怎么写这样的代码呢?

最佳答案

const char *const TestClass<T>::kSyncString[] = {
[TestClass<T>::SYNC_TYPE] = "sync type",
[TestClass<T>::ASYNC_TYPE] = "async type",
};

这种初始化方式叫做designated initializer , C99 有。自 C++11 doesn't have this feature , gcc 具有此功能作为扩展。

我找到了 itthe onlinedocs .它在“C 语言家族的 6 个扩展”中,而不是“C++ 语言的 7 个扩展”。所以,我猜 gcc 无法处理 C 扩展中的 C++ 功能(TestClass<T>::SYNC_TYPE - 模板和作用域运算符)。 (只是猜测 >o<)无论如何,这似乎肯定是编译器扩展的失败。

关于模板类中的 C++ 枚举不能用作常量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29142768/

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