【发布时间】:2019-04-21 18:32:00
【问题描述】:
对我来说,编译器可以推断出这样的模板类型看起来很自然:
template<typename R(typename... Args)>
struct wrap {
std::function<R(Args)> func_;
template<typename... Args2>
wrap(Args2&& ...args2) : func_(std::forward<Args2>(args2)...) {
}
R operator()(Args&&... args) {
cout << "Extra stuff that wrap template does" << endl;
return func_(std::forward<Args>(args)...);
}
}
所以我可以用任何函数进行实例化,而无需显式地将其签名提供给模板:
wrap w([](int x){ return 2*x });
轻松调用:
w(3);
但事实证明,这种包装根本不起作用。 GCC 4.8.1 说expected nested-name-specifier before ‘R’。
为什么这是不可能的?实现这种通用包装功能的方法是什么?
【问题讨论】: