gpt4 book ai didi

c++ - 如何在其值可用于常量表达式的类中初始化数组?

转载 作者:行者123 更新时间:2023-11-30 03:00:40 24 4
gpt4 key购买 nike

我想知道如何在类中初始化数组,其值可用于常量表达式。这是我的问题的解释:

// The goal : initializing an array for a class
// whose values can be used as normal static const
// (as template parameters for example)

class MyClass
{
public:
static const unsigned int value = 42; // <- No problem here
static const unsigned int array[3] = {100, 101, 102}; // <- How to initialize this static const array (with constexpr or metaprogrammation maybe ?)
template<unsigned int T> inline void f() {std::cout<<"Hello, my value is "<<T<<std::endl;} // <- Simple function for demonstration purposes
inline void fvalue() {f<value>();} // <- No problem here
inline void farray() {f<array[1]>();} // <- Big problem here
};
//const unsigned int Class1::array[3] = {100, 101, 102}; // <- If I do this, I will initialize the array but farray() will not compile

在 C++ 2011 中有什么方法可以做到这一点吗? (可能使用 constexpr 或元编程?)

非常感谢!

编辑:正如标题所指定的那样,我需要 array 成为该类的成员(而不是全局数组)。

最佳答案

是的,你可以让它成为 constexpr..

使其成为 constexpr 允许静态成员在类内初始化时拥有比整型或枚举类型更多的类型。特别地,成员只需是字面量类型,初始化器中的所有表达式都必须是常量表达式。所以这很好

class MyClass
{
public:
static constexpr unsigned int array[3] = {100, 101, 102};
template<unsigned int T> inline void f() {
std::cout<<"Hello, my value is "<<T<<std::endl;
} // <- Simple function for demonstration purposes
inline void farray() {f<array[1]>();}
};

// needs a definition out-of-class too. put it into a .cc file
constexpr unsigned int MyClass::array[3];

关于c++ - 如何在其值可用于常量表达式的类中初始化数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805393/

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