我不确定是否可能,所以这就是我想要找到的.
我想创建一个接受任何类型的函子/可调用对象的函数,但我想知道参数类型是什么.(但不强制执行)
所以,这个捕获所有但不给我参数的类型:
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)
(使用或不使用回调作为中间变量)
由于我需要根据用户期望的值类型修改行为,我需要知道他/她期望的类型.