本文整理汇总了C++中variant::is_function方法的典型用法代码示例。如果您正苦于以下问题:C++ variant::is_function方法的具体用法?C++ variant::is_function怎么用?C++ variant::is_function使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类variant
的用法示例。
在下文中一共展示了variant::is_function方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: fml
grid::grid(const variant& v, game_logic::formula_callable* e)
: scrollable_widget(v, e), row_height_(v["row_height"].as_int(0)), selected_row_(-1),
allow_selection_(false), must_select_(false),
swallow_clicks_(false), hpad_(0), show_background_(false),
max_height_(-1), allow_highlight_(true), set_h_(0), set_w_(0),
default_selection_(v["default_select"].as_int(-1)),
draw_selection_highlight_(v["draw_selection_highlighted"].as_bool(false))
{
ASSERT_LOG(get_environment() != 0, "You must specify a callable environment");
if(v.has_key("on_select")) {
const variant on_select_value = v["on_select"];
if(on_select_value.is_function()) {
ASSERT_LOG(on_select_value.min_function_arguments() <= 1 && on_select_value.max_function_arguments() >= 1, "on_select grid function should take 1 argument: " << v.debug_location());
static const variant fml("fn(selection)");
ffl_on_select_.reset(new game_logic::formula(fml));
game_logic::map_formula_callable* callable = new game_logic::map_formula_callable;
callable->add("fn", on_select_value);
select_arg_.reset(callable);
} else {
ffl_on_select_ = get_environment()->create_formula(on_select_value);
}
on_select_ = boost::bind(&grid::select_delegate, this, _1);
}
if(v.has_key("on_mouseover")) {
allow_selection_ = true;
on_mouseover_ = boost::bind(&grid::mouseover_delegate, this, _1);
const variant on_mouseover_value = v["on_mouseover"];
if(on_mouseover_value.is_function()) {
ASSERT_LOG(on_mouseover_value.min_function_arguments() <= 1 && on_mouseover_value.max_function_arguments() >= 1, "on_mouseover grid function should take 1 argument: " << v.debug_location());
static const variant fml("fn(selection)");
ffl_on_mouseover_.reset(new game_logic::formula(fml));
game_logic::map_formula_callable* callable = new game_logic::map_formula_callable;
callable->add("fn", on_mouseover_value);
mouseover_arg_.reset(callable);
} else {
ffl_on_mouseover_ = get_environment()->create_formula(v["on_mouseover"]);
}
}
ncols_ = v["columns"].as_int(1);
if(v.has_key("column_widths")) {
if(v["column_widths"].is_list()) {
ASSERT_LOG(v["column_widths"].num_elements() == ncols_, "List of column widths must have " << ncols_ << " elements");
std::vector<int> li = v["column_widths"].as_list_int();
col_widths_.assign(li.begin(), li.end());
} else if(v["column_widths"].is_int()) {
col_widths_.assign(ncols_, v["column_widths"].as_int());
} else {
ASSERT_LOG(false, "grid: column_widths must be an int or list of ints");
}
} else {
col_widths_.assign(ncols_, 0);
}
col_aligns_.resize(ncols_);
if(v.has_key("column_alignments")) {
if(v["column_alignments"].is_list()) {
// XXX this could be a list of strings as well.
int col = 0;
foreach(const variant& c, v["column_alignments"].as_list()) {
if(c.is_int()) {
set_align(col, static_cast<COLUMN_ALIGN>(c.as_int()));
} else if(c.is_string()) {
const std::string& s = c.as_string();
if(s == "center" || s == "centre") {
set_align(col, ALIGN_CENTER);
} else if(s == "right") {
set_align(col, ALIGN_RIGHT);
} else if(s == "left") {
set_align(col, ALIGN_LEFT);
} else {
ASSERT_LOG(false, "grid: column_alignments must be \"left\", \"right\" or \"center\"");
}
} else {
ASSERT_LOG(false, "grid: column alignment members must be an integer or a string.");
}
col++;
}
} else if(v["column_alignments"].is_int()) {
示例2: widget
dialog::dialog(const variant& v, game_logic::formula_callable* e)
: widget(v,e),
opened_(false), cancelled_(false),
add_x_(0), add_y_(0), last_draw_(-1)
{
forced_dimensions_ = rect(x(), y(), width(), height());
padding_ = v["padding"].as_int(10);
if(v.has_key("background_frame")) {
background_framed_gui_element_ = v["background_frame"].as_string();
}
if(v.has_key("background_draw")) {
std::string scene = v["background_draw"].as_string();
if(scene == "last_scene") {
draw_background_fn_ = boost::bind(&dialog::draw_last_scene);
}
// XXX could make this FFL callable. Or could allow any of the background scenes to be drawn. or both.
}
clear_bg_ = v["clear_background_alpha"].as_int(196);
bg_alpha_ = v["background_alpha"].as_int(255) / GLfloat(255.0);
if(v.has_key("cursor")) {
std::vector<int> vi = v["cursor"].as_list_int();
set_cursor(vi[0], vi[1]);
}
if(v.has_key("on_quit")) {
on_quit_ = boost::bind(&dialog::quit_delegate, this);
ASSERT_LOG(get_environment() != NULL, "environment not set");
const variant on_quit_value = v["on_quit"];
if(on_quit_value.is_function()) {
ASSERT_LOG(on_quit_value.min_function_arguments() == 0, "on_quit_value dialog function should take 0 arguments: " << v.debug_location());
static const variant fml("fn()");
ffl_on_quit_.reset(new game_logic::formula(fml));
game_logic::map_formula_callable* callable = new game_logic::map_formula_callable;
callable->add("fn", on_quit_value);
quit_arg_.reset(callable);
} else {
ffl_on_quit_ = get_environment()->create_formula(v["on_quit"]);
}
}
if(v.has_key("on_close")) {
on_close_ = boost::bind(&dialog::close_delegate, this, _1);
ASSERT_LOG(get_environment() != NULL, "environment not set");
const variant on_close_value = v["on_close"];
if(on_close_value.is_function()) {
ASSERT_LOG(on_close_value.min_function_arguments() <= 1 && on_close_value.max_function_arguments() >= 1, "on_close dialog function should take 1 argument: " << v.debug_location());
static const variant fml("fn(selection)");
ffl_on_close_.reset(new game_logic::formula(fml));
game_logic::map_formula_callable* callable = new game_logic::map_formula_callable;
callable->add("fn", on_close_value);
close_arg_.reset(callable);
} else {
ffl_on_close_ = get_environment()->create_formula(v["on_close"]);
}
}
std::vector<variant> children = v["children"].as_list();
foreach(const variant& child, children) {
widget_ptr w = widget_factory::create(child, e);
if(w->x() != 0 || w->y() != 0) {
//if(child.has_key("add_xy")) {
// std::vector<int> addxy = child["add_xy"].as_list_int();
// add_widget(widget_factory::create(child, e), addxy[0], addxy[1]);
add_widget(w, w->x(), w->y());
} else {
add_widget(w);
}
}