У меня есть два класса-обёртки, написанные на Objective-C++
для их эквивалентных классов C ++.Давайте назовем их OABCClass
и OXYZCallbackInterface
.Теперь у меня есть метод в C++ (ABCClass)
, в котором аргумент имеет интерфейс- XYZCallbackInterface
.
Например:
std::string methodWithArguments(std::string req, CommonNamespace::XYZCallbackInterface &callback);
В моем классе оболочки Objective-C ++ для ie OABCClass
моя реализация метода для вышеупомянутого метода C ++ выглядит следующим образом:
-(NSString *)methodWithArguments(NSString*)req callback(OXYZCallbackInterface*)callback {
std::string res = cppClassVariable->methodWithArguments(req.UTF8String, callback);
}
Здесь я получаю ошибку:
Неконстантная lvalue ссылка на тип 'Common :: XYZCallbackInterface'невозможно связать с временным типом 'Common :: XYZCallbackInterface *'
Как правильно его использовать?Любая помощь приветствуется.
//Objective-C++ side
#ifndef OXYZCallbackInterface_h
#define OXYZCallbackInterface_h
#import <Foundation/Foundation.h>
//.h
@interface OXYZCallbackInterface : NSObject
-(bool)onResponseAvailable:(NSString* )response;
@end
#endif /* OXYZCallbackInterface_h */
//.mm
#import "OXYZCallbackInterface.h"
#include "Common/Common.Shared/OXYZCallbackInterface.h"
using namespace CommonNamespace;
@implementation OXYZCallbackInterface
- (instancetype)init
{
self = [super init];
return self;
}
-(bool)onResponseAvailable:(NSString* )response{
bool isResp = _objIPICCallback->onResponseAvailable(response.UTF8String);
return isResp;
}
@end
//C++ side
#pragma once
#include "DataTypes.h"
namespace CommonNamespace
{
class XYZCallbackInterface
{
public:
virtual ~ XYZCallbackInterface() {}
virtual bool onResponseAvailable(std::string response) = 0;
};
}
И реализация OABCClass.mm выглядит так:
-(NSString*) methodWithArguments(NSString*)req callback(OXYZCallbackInterface*)callback{
NSString* result = @"";
_pOABC -> methodWithArguments("", (__bridge XYZCallbackInterface*)callback);
// Error : Non-const lvalue reference to type CommonNamespace::XYZCallbackInterface cannot bind to a temporary of type CommonNamespace::XYZCallbackInterface *
return result;
}