gpt4 book ai didi

C++ constexpr 计数构造函数调用

转载 作者:可可西里 更新时间:2023-11-01 18:32:11 26 4
gpt4 key购买 nike

我试图在编译时静态实例化一些对象。我需要的是为成员 int 变量设置一个增量值。例如,我创建的第一个对象的值为 0,第二个为 1,第三个为 2...总结一下,我需要这样的东西,但它必须像 constexpr 一样工作。

//header
class MyClass final {
private:
static int IDcount;
public:
const int ID;
constexpr MyClass(args);
//~MyClass();
};
//source
int MyClass::IDcount = 0;
constexpr MyClass::MyClass(args) : ID(MyClass::IDcount++) {
}

有没有办法在编译时实现这一点(无需将 ID 作为构造函数的参数)

最佳答案

它不能按照您定义的方式完成,但是可以使用一个非标准但广泛实现的预处理器技巧。

#include <iostream>

struct MyClass final {
constexpr MyClass(int myid, const char *myname)
: id(myid), name(myname) {}
int id;
const char *name;
};

constexpr MyClass m[]{
MyClass(__COUNTER__, "Larry"),
MyClass(__COUNTER__, "Moe"),
MyClass(__COUNTER__, "Curly")
};

int main()
{
for (auto const &obj : m)
std::cout << obj.id << '\t' << obj.name << "\n";
}

__COUNTER__ 宏在 Microsoft's Visual C++ 中定义, gcc since version 4.3clang .

运行时,该程序产生:

0   Larry
1 Moe
2 Curly

关于C++ constexpr 计数构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26529542/

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