Реализация метода интерфейса 'const' в управляемом C++

Мне нужно реализовать интерфейс С++ в управляемом С++:

class MyInterface
{
    virtual int Get() const = 0;
};

Как я могу реализовать этот интерфейс с помощью метода «const» в С++, управляемого с возможностью импорта реализации из библиотеки классов С# (для модульного тестирования?

На данный момент у меня есть реализация PIMPL для управляемых, которая реализует необработанные методы (не интерфейс) с той же сигнатурой, но без «константы». и в моей высокоуровневой реализации я использую const_cast. Мне не нравится этот способ, и он даже не работает:

class MyImplementation: public MyInterface
{
    public:
        /*virtual*/ int Get() const
        {
            return const_cast<??>(??_impl).call();
        }
    private:
        msclr::gcroot<MyImplementationImpl> _impl;
};

person deeptowncitizen    schedule 04.11.2013    source источник
comment
Вы заявили требование. Какой у Вас вопрос?   -  person David Heffernan    schedule 04.11.2013
comment
Убедитесь, что ваш вопрос содержит где-то символ ?...   -  person Matthew Watson    schedule 04.11.2013
comment
Это не управляемый интерфейс. Вы не можете реализовать его с управляемым классом.   -  person Hans Passant    schedule 04.11.2013
comment
Вы используете этот интерфейс из C# или наоборот?   -  person alexm    schedule 04.11.2013


Ответы (1)


Я остановился на таком решении:

class IInterface
{
public:
    virtual int Get() const = 0;
};

class Implementation : IInterface
{
public:
    virtual int Get() const
    {
        return const_cast<ManagedImplementation^>(_impl.get())->Get();
    }

private:
    mutable msclr::auto_gcroot<ManagedImplementation^> _impl;
};

public ref class ManagedImplementation
{
public:
    int Get()
    {
        return 0;
    }
};
person deeptowncitizen    schedule 05.11.2013