小编use*_*257的帖子

std :: bind到std :: function?

我使用这个得到一个编译错误:

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

c++ bind function std c++11

20
推荐指数
1
解决办法
2万
查看次数

Bash:使用管道进入进程替换的退出代码到while循环

以下脚本调用另一个程序在while循环中读取其输出(请参阅Bash - 如何将输入传递给while循环并在循环结束后保留​​变量):

while read -r col0 col1; do
    # [...]
done < <(other_program [args ...])
Run Code Online (Sandbox Code Playgroud)

如何检查退出代码other_program以查看循环是否正确执行?

bash process-substitution

10
推荐指数
2
解决办法
1579
查看次数

Numpy element-wise dot产品

是否有一种优雅,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)

提前致谢!

python numpy

8
推荐指数
1
解决办法
6026
查看次数

限制SLURM中正在运行的作业数

我在SLURM排队多个工作.我可以限制slurm中并行运行的作业数量吗?

提前致谢!

slurm

7
推荐指数
3
解决办法
4101
查看次数

模板方法enable_if专门化

我有以下不编译的代码.这是接受参数的模板类中的两个函数

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的类型对成员方法进行专门化.

有人有点想法吗?

c++ templates class enable-if c++11

6
推荐指数
1
解决办法
1765
查看次数

将重载函数转换为模板仿函数

我有一些重载函数,例如

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)

c++ functor c++11

5
推荐指数
1
解决办法
501
查看次数

匿名 std::packaged_task

我正在尝试围绕 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()>>类型?

c++ thread-safety packaged-task

4
推荐指数
1
解决办法
1682
查看次数

隐藏单个函数背后的移动语义

例如,我有一个可以处理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)

谢谢!

c++ move move-semantics c++11

2
推荐指数
1
解决办法
202
查看次数