小编Jen*_*fke的帖子

如何创建一个带有可变参数的仿函数的函数模板

我正在尝试实现一个函数模板(在C++ 11中),其参数是一个带有任意参数的lambda,并返回一个兼容的std :: function对象.当被调用以异步调用原始lambda时,目标是返回函数,但是现在我只返回原始lambda.

问题只是让编译器接受lambda作为函数模板的参数.以下是一些简单的模板:

#include <functional>
using namespace std;

template <class Arg>
function<void(Arg)> pass1(function<void(Arg)> fn) {
    return fn;
}

template <class... Args>
function<void(Args...)> passn(function<void(Args...)> fn) {
    return fn;
}
Run Code Online (Sandbox Code Playgroud)

它们做同样的事情,它只是pass1在单参数仿函数上工作,同时passn取任意数.

所以现在我们尝试使用它们,首先pass1:

    auto p1 = pass1( [](int a)->void {cout << a;} );  // ERROR
Run Code Online (Sandbox Code Playgroud)

这不起作用; 编译器似乎无法告诉lambda采用什么参数.Clang错误消息是:

Untitled.cpp:17:12: error: no matching function for call to 'pass1'
    auto p1 = pass1( [](int a)->void {cout << a;} );
              ^~~~~
Untitled.cpp:6:21: note: candidate template ignored: could not match …
Run Code Online (Sandbox Code Playgroud)

c++ lambda templates c++11

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

如何使 CppUnit 日志记录更详细?

我正在使用 CppUnit 为 C++ 库编写单元测试。默认情况下,它打印一个“.”。每个测试的字符到控制台。我想在测试运行之前将每个测试的名称记录在单独的行上。

我研究了 CppUnit API,但如何自定义输出并不明显。它不是提供自定义选项,而是一个可以插入新处理程序的框架。(教程也没有帮助。)我可能会花一天的时间来弄清楚如何做到这一点,但我不能浪费时间。有人可以提供一个可以自定义每个测试日志输出的快速片段吗?

c++ unit-testing cppunit

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

标签 统计

c++ ×2

c++11 ×1

cppunit ×1

lambda ×1

templates ×1

unit-testing ×1