我正在尝试实现一个函数模板(在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) 我正在使用 CppUnit 为 C++ 库编写单元测试。默认情况下,它打印一个“.”。每个测试的字符到控制台。我想在测试运行之前将每个测试的名称记录在单独的行上。
我研究了 CppUnit API,但如何自定义输出并不明显。它不是提供自定义选项,而是一个可以插入新处理程序的框架。(教程也没有帮助。)我可能会花一天的时间来弄清楚如何做到这一点,但我不能浪费时间。有人可以提供一个可以自定义每个测试日志输出的快速片段吗?