![](/img/trans.png)
[英]C++ Templates: Automatically overload templated function with const& for constant params?
[英]C++ templated function wrapper arguments using const& versus &
为构造函数创建包装函数,例如以下编译:
#include <iostream>
template <typename T>
class wrapper
{
public:
template <typename A0>
T* operator () (const A0& a0) const
{
return new T(a0);
}
};
class Foo
{
public:
Foo(int i) { std::cout << "Foo:Foo(" << i << ")" << std::endl; }
};
int main(int argc, char** argv)
{
wrapper<Foo>()(42);
return 0;
}
但是,当我更新该行时,代码无法编译:
T* operator () (const A0& a0) const
至:
T* operator () (A0& a0) const
我的猜测是这与右值'42'无法绑定到非常量引用有关。 但是,当我将引用设为const时,这将意味着我永远无法调用实际上接受非const引用的构造函数。 有人可以解释这里发生了什么,什么才是使它正常工作的正确方法?
我的猜测是这与右值'42'无法绑定到非常量引用有关。
是。 正确。
但是,当我将引用设为const时,这将意味着我永远无法调用实际上接受非const引用的构造函数。
否。不正确。 您仍然可以使用非常量引用来调用它。 实际上,这就是const-ness的工作方式:非const引用/指针/对象可以隐式转换为const引用/指针/对象,但反之亦然。
所以尝试一下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.