Cla*_*diu 3 c++ templates const
我有类似的东西:
template <class Foob, class T>
void do_it(Foob& f, T& t) { f.proc(t); }
template <class Foob, class T>
void do_it(Foob& f, const T& t) { f.proc(t); }
Run Code Online (Sandbox Code Playgroud)
有些人Foob需要const T&s而其他人Foob只需要T&s,或者同样Foob可能有两个procs,一个用于const案例,一个用于非const案例,用于做不同的事情.
但是,代码do_it是一样的:它只是f.proc(t).有时代码是多行,但仍然相同.有没有办法只写do_it一个函数?像这样的东西,虽然这显然不起作用:
template <class Foob, class MaybeConst, class T>
void do_it(Foob& f, MaybeConst T& t) { f.proc(t); }
Run Code Online (Sandbox Code Playgroud)
Bri*_*ian 10
实际上如果t参数总是左值,那么你只需要第一次重载!如果左值有类型const U,则模板参数T被推导为const U,并且实例化函数的第二个参数类型将是const U&,它将很好地绑定到const左值.
仅当参数是rvalue时才需要第二个重载.但是,为什么不使用完美转发,而不是将其作为特殊情况?
// works for both lvalues and rvalues with any cv-qualification
template <class Foob, class T>
void do_it(Foob& f, T&& t) { f.proc(std::forward<T>(t)); }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |