Constants

C++ allows constants to be defined globally, on namespaces and classes/structs.

constexpr int CONSTANT_1 = 1;

namespace SomeNamespace
{
  constexpr int CONSTANT_2 = 2;
}

class MyClass
{
  static constexpr int CONSTANT_3 = 3;
}

These constants can be wrapped like this:

Object(rb_cObject).define_constant("CONSTANT_1", CONSTANT_1);

Module rb_mSomeNamespace = define_module("SomeNamespace");
rb_mSomeNamespace.define_constant("CONSTANT_2", CONSTANT_2);

Data_Type<MyClass> rb_cMyClass = define_class<MyClass>("MyClass").
  define_constant("CONSTANT_3", CONSTANT_3);

Enums as Constants

Older C++ code sometimes uses anonymous C style enums as a hack for defining class constants. For more information see Nested and Anonymous Enums.