下面是我的示例代码:
#include <functional>
#include <iostream>
#include <memory>
using namespace std::placeholders;
template <typename recvtype, typename responsetype>
void myfunc(std::unique_ptr<recvtype> input, std::function<void(std::unique_ptr<responsetype>)> callback)
{
auto msg = std::make_unique<responsetype>();
callback(std::move(msg));
return;
}
class Ret
{
public:
Ret(){}
void BRet(std::unique_ptr<Ret> r)
{
std::cout << "Called Me!!!" << std::endl << std::fflush;
}
};
class In
{
public:
In(){}
};
void test(std::unique_ptr<In> input, std::function<void(std::unique_ptr<Ret>)> callback)
{
myfunc<In , Ret>(std::move(input), callback);
}
int main()
{
std::unique_ptr<In> a = std::make_unique<In>();
Ret r1;
std::function<void(std::unique_ptr<Ret>)> 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'以及如何进行 test 以接受通用的唯一指针-我的意思是测试方法现在可以要求使用任何类型,而不是“输入和返回” 类型?
答案 0 :(得分:6)
1
来自此行:
std::cout << "Called Me!!!" << std::endl << std::fflush;
请注意,最后使用std::fflush
。那不是std::flush
操纵器,而是std::fflush
函数。
该函数衰减为始终为true的布尔值,这就是打印1
的原因。
请注意,不需要使用std::flush
(操纵器),因为std::endl
将刷新流。另请注意,通常也不需要std::endl
,除非您明确想要刷新流。打印一条普通的换行符通常就足够了:
std::cout << "Called Me!!!\n";