我使用这个得到一个编译错误:
std::vector<std::function<int(int)>> functions;
std::function<int(int, int)> foo = [](int a, int b){ return a + b; };
std::function<int(int)> bar = std::bind(foo, 2);
functions.push_back(bar);
Run Code Online (Sandbox Code Playgroud)
错误是:
/usr/include/c++/4.6/functional:1764:40:错误:无法调用'(std :: _ Bind(int)>)(int)'
有人能告诉我如何将a std::bind转换为std::function?
以下脚本调用另一个程序在while循环中读取其输出(请参阅Bash - 如何将输入传递给while循环并在循环结束后保留变量):
while read -r col0 col1; do
# [...]
done < <(other_program [args ...])
Run Code Online (Sandbox Code Playgroud)
如何检查退出代码other_program以查看循环是否正确执行?
是否有一种优雅,numpy的方式来应用点积元素?或者如何将以下代码翻译成更好的版本?
m0 # shape (5, 3, 2, 2)
m1 # shape (5, 2, 2)
r = np.empty((5, 3, 2, 2))
for i in range(5):
for j in range(3):
r[i, j] = np.dot(m0[i, j], m1[i])
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我有以下不编译的代码.这是接受参数的模板类中的两个函数
typename std::enable_if<std::is_void<Ret>::value, Ret>::type _on_dispatched() {
// ...
}
typename std::enable_if<!std::is_void<Ret>::value, Ret>::type _on_dispatched() {
// ....
}
Run Code Online (Sandbox Code Playgroud)
我希望根据Ret的类型对成员方法进行专门化.
有人有点想法吗?
我有一些重载函数,例如
int a(int) {/*...*/}
float a(float) {/*...*/}
/* ... */
int b(int) {/*...*/}
float b(float) {/*...*/}
/* ... */
Run Code Online (Sandbox Code Playgroud)
我的目标是将这些函数包装到一个仿函数对象中:
template <typename T>
struct func_a {
auto T operator()(T t) -> decltype(a(t)) {return a(t);}
};
Run Code Online (Sandbox Code Playgroud)
是否有一种方法可以将重载函数作为参数在其他模板上定义上述模板结构?像这样的东西:
template </* pointer to an overloaded function f */>
struct create_functor {
template <typename T>
struct func {
auto operator()() -> decltype(f(t)) {return f(t);}
}
};
Run Code Online (Sandbox Code Playgroud)
所以我可以在编译时生成结构,如:
typedef create_functor<a>::func<int> func_a_int;
typedef create_functor<a>::func<float> func_a_float;
typedef create_functor<b>::func<int> func_a_int;
typedef create_functor<b>::func<float> func_a_float;
Run Code Online (Sandbox Code Playgroud) 我正在尝试围绕 Glib::Dispatcher 构建一些包装器,以将任何功能类型分派到调度程序中。我想要一些可以将函数传输到 Glib 主循环的函数调度:
template<class Function, class ...Args>
std::future<typename std::result_of<Function(Args...)>::type>
dispatch(Function &&f, Args &&...args);
Run Code Online (Sandbox Code Playgroud)
这个函数将从 f(args) 创建一个打包的任务并返回它的未来:
std::packaged_task<typename std::result_of<Function(Args...)>::type()> task(f(args...));
return task.get_future();
Run Code Online (Sandbox Code Playgroud)
我现在需要从这个任务 a 创建std::packaged_task<void()>将它们放入一个 std::queue 以便连接到 Glib::Dispatcher 的函数可以执行它们。
我的问题是:如何从一个创建std::packaged_task<R()>一个std::packaged_task<void()>在两个步骤,这样我可以从第一个任务返回它的未来,并把第二个进入队列std::queue<std::packaged_task<void()>>类型?
例如,我有一个可以处理const T &和T &&值的函数:
template <typename T>
/* ... */ foo(const T &) {
std::cout << "const T & as arg" << std::endl;
}
template <typename T>
/* ... */ foo(T &&) {
std::cout << "T && as arg" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以编写单个函数,自动处理这两种类型?如:
template <typename T>
/* ... */ bar(T t) {
foo(t);
}
Run Code Online (Sandbox Code Playgroud)
以便:
T a;
bar(a); // Handles as const T &
T b;
bar(std::move(b)); // Handles as T &&
Run Code Online (Sandbox Code Playgroud)
谢谢!