bar*_*-md 7 c++ instantiation constexpr
我正在尝试在编译时静态实例化一些对象.我需要的是设置成员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++) {
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在编译时实现这一点(不将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";
}
Run Code Online (Sandbox Code Playgroud)
该宏在Microsoft 的 Visual C++、gcc 自版本 4.3和clang__COUNTER__中定义。
运行时,该程序会产生:
0 Larry
1 Moe
2 Curly
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |