假设我们有一个这样的类模板:
template<typename F>
class A
{
public:
template<typename... Args>
A(F f, Args... args)
{ /* Do something... */ }
};
现在我想以某种方式使用它,如下所示:
A<int(int)> a(::close, 1);
现在的问题是:有什么办法可以省略<int(int)>
因为编译器可以知道这些信息::close
?无需保存模板的“设计”。
至于具体任务,我需要设计一个类的模板。此类的对象可以在构造时获取函数和该函数的参数,并稍后调用该函数。
不,你(目前)不能。执行此操作的标准方法是创建“make_like”函数(例如make_pair http://en.cppreference.com/w/cpp/utility/pair/make_pair, make_optional http://en.cppreference.com/w/cpp/utility/optional/make_optional ...):
template<typename F, typename... Args>
A<std::decay_t<F>> make_A (F &&f, Args&&... args) {
return {std::forward<F>(f), std::forward<Args>(args)...};
}
C++17将引入类的模板参数推导 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0091r2.html这将允许你完全做你想做的事(另见巴里的回答 https://stackoverflow.com/a/38228754/2666289 below).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)