xgboost
| 命名空间 |
parameter.h 文件参考

用于将 C++11 枚举类用作 DMLC 参数的宏 更多...

#include <dmlc/parameter.h>
#include <xgboost/base.h>
#include <string>
#include <type_traits>
parameter.h 的包含依赖图
此图显示哪些文件直接或间接包含此文件

转到此文件的源代码。

结构  xgboost::XGBoostParameter< Type >
 

命名空间

 xgboost
 Learner 接口,将目标、gbm 和评估整合在一起。这是用户界面 XGBoost 训练模块。
 

#define DECLARE_FIELD_ENUM_CLASS(EnumClass)
 枚举类 (由 int 支持) 的 FieldEntry 特化 更多...
 

详细描述

使用 C++11 枚举类作为 DMLC 参数的宏

版权所有 2018 年,贡献者

作者
Hyunsu Philip Cho

宏定义文档

◆ DECLARE_FIELD_ENUM_CLASS

#define DECLARE_FIELD_ENUM_CLASS (   EnumClass)
namespace dmlc { \
namespace parameter { \
template <> \
class FieldEntry<EnumClass> : public FieldEntry<int> { \
public: \
FieldEntry() { \
static_assert( \
std::is_same_v<int, typename std::underlying_type_t<EnumClass>>, \
"enum class must be backed by int"); \
is_enum_ = true; \
} \
using Super = FieldEntry<int>; \
void Set(void *head, const std::string &value) const override { \
Super::Set(head, value); \
} \
inline FieldEntry<EnumClass>& add_enum(const std::string &key, EnumClass value) { \
Super::add_enum(key, static_cast<int>(value)); \
return *this; \
} \
inline FieldEntry<EnumClass>& set_default(const EnumClass& default_value) { \
default_value_ = static_cast<int>(default_value); \
has_default_ = true; \
return *this; \
} \
inline void Init(const std::string &key, void *head, EnumClass& ref) { /* NOLINT */ \
Super::Init(key, head, *reinterpret_cast<int*>(&ref)); \
} \
}; \
} /* namespace parameter */ \
} /* namespace dmlc */
定义: data.h:794

枚举类 (由 int 支持) 的 FieldEntry 特化

使用此宏可将 C++11 枚举类用作 DMLC 参数

用法

// 枚举类必须继承自 int 类型
enum class Foo : int {
kBar = 0, kFrog = 1, kCat = 2, kDog = 3
};
// 需要此行以防止编译错误
// 现在像往常一样定义 DMLC 参数;
// 枚举类现在可以是成员。
struct MyParam : dmlc::Parameter<MyParam> {
Foo foo;
DMLC_DECLARE_PARAMETER(MyParam) {
DMLC_DECLARE_FIELD(foo)
.set_default(Foo::kBar)
.add_enum("bar", Foo::kBar)
.add_enum("frog", Foo::kFrog)
.add_enum("cat", Foo::kCat)
.add_enum("dog", Foo::kDog);
}
};
DMLC_REGISTER_PARAMETER(MyParam);
DECLARE_FIELD_ENUM_CLASS(xgboost::DataSplitMode)