2015-02-19 2 views
0

Мне нужно записать лямбда-выражение в C++/cx и передать его как параметр в класс компонентов public ref class MyClass sealed. Я пытался использовать std::function, но компилятор жалуется signature of public member contains native type 'std::func...C++/cx - Ошибка: здесь не разрешен тип делегата

Я читал и читать, и public delegate void MyCallback(byte, byte, byte *) выглядит, как это должно быть заменой для typedef std::function<void(byte, byte, byte *)> MyCallback;

Я попытался использовать его в качестве параметра:

void 
attach (
    byte cmd_, 
    MyCallback cb_ 
); 

Однако Intellisense дает мне ошибку: "Error: a delegate type is not allowed here".

Я не получить его ... Как вы должны передать функции вокруг , и как это будет выглядеть?

+0

Вы можете использовать функцию std :: и передать ее во внутренний метод MyClass (не общедоступный). Если это не поможет, вы можете разместить более крупный образец кода, чтобы я мог воспроизвести? – robwirving

+0

@robwirving C++/cx не позволяет открывать 'std :: function' в сигнатуре метода' public ref class' – Zak

+1

. Он не позволяет открывать подпись метода с помощью спецификатора общего доступа. Но есть внутренний спецификатор, который позволяет публично публиковать классы, отличные от C++/CX. https://msdn.microsoft.com/en-us/library/windows/apps/hh969551.aspx – robwirving

ответ

1

Если ваш тип MyCallback является управляемым делегатом, чем вы должны указать, что вы принимаете управляемую ссылку этого типа:

void 
attach (
    byte cmd_, 
    MyCallback^ cb_ 
); 

ума знака ^. Без этого знака вы увидите странную ошибку: a delegate type is not allowed here. Этот знак буквально означает a managed reference of type ....

Смежные вопросы