小编Arj*_*jan的帖子

接受任何类型的可调用并且也知道参数类型

我不确定是否可能,所以这就是我想要找到的.

我想创建一个接受任何类型的函子/可调用对象的函数,但我想知道参数类型是什么.(但不强制执行)

所以,这个捕获所有但不给我参数的类型:

template < typename T >
void optionA( T );
Run Code Online (Sandbox Code Playgroud)

这个捕获最多,并具有参数的类型

template < typename T >
void optionB( std::function< void(T) > );
Run Code Online (Sandbox Code Playgroud)

但是这个不允许lambdas,所以

optionB( [](int){} );
Run Code Online (Sandbox Code Playgroud)

不会编译.这有点奇怪,因为这将编译:

std::function< void(int) > func = [](int){};
optionB( func );
Run Code Online (Sandbox Code Playgroud)

那么有没有办法接受所有选项,还知道期望哪种类型的参数?

提前致谢!

- 编辑 -

我想这样做的原因是我想让我的库用户注册一个特定类型的回调.对我来说,最自然的方式是

auto callback = []( int val ) { cout << "my callback " << val << endl; };
object.register( callback );
Run Code Online (Sandbox Code Playgroud)

(使用或不使用回调作为中间变量)

由于我需要根据用户期望的值类型修改行为,我需要知道他/她期望的类型.

c++ lambda templates functor c++11

14
推荐指数
2
解决办法
2733
查看次数

标签 统计

c++ ×1

c++11 ×1

functor ×1

lambda ×1

templates ×1