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 ++のバグですが、残念ながら、簡単な回避策は見つかりませんでした。
想定されるVisualC++コンパイラのバグに対する不安な回避策:
#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
別の答えは、 (動的割り当てを読む)が唯一の選択肢であると主張しています。
それは間違っている。