auto const doSomethingTo = []( Object&& o ) { o.doSomething(); };
doSomethingTo( condition? Object( p1 ) : Object( p1, p2, p3 ) );
免责声明:编译器未触及代码。
编辑:上面的代码,当Object( Object&& )
构造函数为时private
,无法使用 MSVC 11.0 编译(甚至是去年 11 月的 CTP),但使用 MinGW g++ 4.7.1 和某些版本的clang编译得很好。
看来它应该编译。
所以,这可能是 Visual C++ 中的一个错误——但不幸的是,我没有找到一个简单的解决方法。
对于假定为 Visual C++ 编译器错误的一个令人不安的解决方法:
#include <fstream>
#include <iostream>
using namespace std;
class Object
{
private:
Object( Object const& );
Object( Object&& );
public:
void doSomething() const {}
Object( int ) {}
Object( int, int, int ) {}
};
int main( int argc, char* argv[] )
{
int p1 = 0, p2 = 0, p3 = 0;
bool condition = argc == 2;
auto const doSomething1 = [=]() { Object o( p1 ); o.doSomething(); };
auto const doSomething2 = [=]() { Object o( p1, p2, p3 ); o.doSomething(); };
if( condition ) { doSomething1(); } else { doSomething2(); }
}
另一个答案认为new
(阅读:动态分配)是您唯一的选择。
那是错误的。