作者:崔颖2849464 | 来源:互联网 | 2022-12-10 03:08
以下是我的示例代码:
#include
#include
#include
using namespace std::placeholders;
template
void myfunc(std::unique_ptr input, std::function)> callback)
{
auto msg = std::make_unique();
callback(std::move(msg));
return;
}
class Ret
{
public:
Ret(){}
void BRet(std::unique_ptr r)
{
std::cout <<"Called Me!!!" < input, std::function)> callback)
{
myfunc(std::move(input), callback);
}
int main()
{
std::unique_ptr a = std::make_unique();
Ret r1;
std::function)> f = std::bind(&Ret::BRet, &r1, _1);
test(std::move(a),f);
}
当我编译并执行代码时,我得到以下输出:
$ c++ --std=c++14 -g try17.cpp
MINGW64 /c/test
$ ./a.exe
Called Me!!!
1
MINGW64 /c/test
$
我不确定在控制台上打印'1'的位置以及如何进行测试以接受通用的唯一指针 - 我的意思是现在可以调用任何类型的测试方法而不是'In and Ret'类型?
1> Some program..:
该1
来源于此行:
std::cout <<"Called Me!!!" <
请注意,最后使用std::fflush
.那不是std::flush
操纵者而是std::fflush
功能.
函数衰减到一个总是为true的布尔值,这就是你得到1
打印的原因.
请注意,std::flush
不需要使用(操纵器),因为std::endl
将刷新流.另请注意std::endl
,除非您明确要刷新流,否则通常也不需要.打印普通换行通常就足够了:
std::cout <<"Called Me!!!\n";