如何获取std::bind
表达式的类型以将其存储在类成员中?例如,我有这个:
template<class F, class ...Args>
void foo(F&& funct, Args&&... args) {
typedef decltype(std::bind(funct, std::forward<Args>(args)...)) T;
T bar = std::bind(funct, std::forward<Args>(args)...);
}
但我想将其转换为:
template<class F, class ...Args>
class Foo {
void foo(F&& funct, Args&&... args) {
bar = std::bind(funct, std::forward<Args>(args)...);
}
T bar; // what is the type of bar?
}
答案 0 :(得分:5)
答案 1 :(得分:1)
std::function
似乎更简单。但你可以使用:
template<class F, class ...Args>
class Foo {
using T = decltype(std::bind(std::declval<F>(), std::declval<Args>()...));
Foo(F&& funct, Args&&... args) : bar(std::bind(funct, std::forward<Args>(args)...))
{}
T bar;
};
请注意,std::bind
返回类型不能默认构造。