为构造函数创建一个包装函数,例如以下编译就好了:
#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
我的猜测是这与rvalue'42'无法绑定到非const引用有关。但是当我创建引用const时,这意味着我永远不能调用实际采用非const引用的构造函数。有人可以解释这里发生了什么,以及使它工作的正确方法是什么?
答案 0 :(得分:1)
我猜这与rvalue&#39; 42&#39;不能绑定到非const引用。
是。正确的。
但是当我创建引用const时,这意味着我永远不能调用实际采用非const引用的构造函数。
没有。不正确。您仍然可以使用非const引用来调用它。实际上,这就是const-ness的工作原理:非const引用/指针/对象可以隐式转换为const引用/指针/对象,反之亦然。
所以试一试。