假设我有以下函数,它将函数作为参数.
template <typename F>
void test_func(F f)
{
// typedef typename function_traits<F>::return_type T;
typedef int T;
std::mt19937 rng(std::time(0));
std::uniform_int_distribution<T> uint_dist10(0, std::numeric_limits<T>::max());
f(uint_dist10(rng), uint_dist10(rng)); // Problem!
}
Run Code Online (Sandbox Code Playgroud)
用法是:
int foo(int, int) { return 0; }
int bar(int, int, int, int) { return 0; }
int main()
{
test_func(foo);
// test_func(bar);
}
Run Code Online (Sandbox Code Playgroud)
就像foo和bar,我有几个返回的函数T,并采取一些类型的参数T.我想test_func生成尽可能多的调用我的RNG,因为函数f需要参数.换句话说,我们可以假设T始终是整数类型,并且每个参数将是相同的,即对RNG的函数调用.
使用function_traits(比如Boost中的那些),我可以获取返回类型F,这有点帮助.粗略地说,我的问题是
如何生成所需数量的函数调用,使其与函数F的arity匹配?
在C++ 11之前,我会看一下Boost.Preprocessor,或者可能依赖于模板专业化.现在有更好的方法吗?
Dash 有一个不错的Dropdown组件,支持多值选择。在我的应用程序中,用户可以通过多个下拉菜单进行数据分段以选择属性“A”、“B”、“C”、“D”和“E”。还允许用户基于属性的否定进行分段,例如“not A”和“not E”,将是有用的。
是否已经有一个 Dropdown 组件可以支持单击项目(即,当用户单击选定的属性“A”时,我们可以使元素变为红色以表示“不是 A”现在被选中)?例如,假设用户在多值下拉示例中单击“纽约市” ,并且包含它的相应“框”更改颜色。
Dash 文档解释了如何创建您自己的组件,但这并不涵盖您只想扩展现有组件的场景。如果没有这样的组件可用,我将如何制作一个?
进一步的背景:
在plotly 论坛上有一个讨论,用户解释了如何扩展现有组件。这样做的主要缺点是,每次对组件进行更改或发布新的 dash 版本时,都需要更新和重建整个dash-core-components库。
dash-docs 上有一个问题,用于编写教程来涵盖这种情况,到目前为止没有明显的进展。