次のように定義されたコンストラクターを持つクラスがあります。
LambdaJSONVisitor();
LambdaJSONVisitor(boost::function<void (const Value &)> f);
LambdaJSONVisitor(boost::function<void (const Object &)> f);
LambdaJSONVisitor(boost::function<void (const KeyValuePair &)> f);
LambdaJSONVisitor(boost::function<void (const Array &)> f);
そして、私はこのようなオブジェクトを構築しようとしています:
LambdaJSONVisitor setNodeIDVisitor([&](const JSONAPI::Value &val) -> void
{
...
});
コンパイルしようとすると、次のコンパイラ エラーが発生します。
4>netmodel\CNetworkAlarmBuilder.cpp(60): error C2668: 'JSONAPI::LambdaJSONVisitor::LambdaJSONVisitor' : ambiguous call to overloaded function
4> C:\workspace\client\projects\JSONParser\API/LambdaJSONVisitor.h(21): could be 'JSONAPI::LambdaJSONVisitor::LambdaJSONVisitor(boost::function<Signature>)'
4> with
4> [
4> Signature=void (const JSONAPI::Array &)
4> ]
4> C:\workspace\client\projects\JSONParser\API/LambdaJSONVisitor.h(20): or 'JSONAPI::LambdaJSONVisitor::LambdaJSONVisitor(boost::function<Signature>)'
4> with
4> [
4> Signature=void (const JSONAPI::KeyValuePair &)
4> ]
4> C:\workspace\client\projects\JSONParser\API/LambdaJSONVisitor.h(19): or 'JSONAPI::LambdaJSONVisitor::LambdaJSONVisitor(boost::function<Signature>)'
4> with
4> [
4> Signature=void (const JSONAPI::Object &)
4> ]
4> C:\workspace\client\projects\JSONParser\API/LambdaJSONVisitor.h(18): or 'JSONAPI::LambdaJSONVisitor::LambdaJSONVisitor(boost::function<Signature>)'
4> with
4> [
4> Signature=void (const JSONAPI::Value &)
4> ]
4> while trying to match the argument list '(`anonymous-namespace'::<lambda1>)'
このようなオーバーライドされたコンストラクターにパラメーターとしてラムダを渡すことは可能ですか? もしそうなら、私は何を間違っていますか? また、コードを変更して機能させるにはどうすればよいですか? Visual Studio 2010 を使用しています。
ありがとう