Невозможно вызвать не виртуальную функцию шаблона класса из кода C # - PullRequest
0 голосов
/ 29 мая 2019

В управляемом проекте C ++ у меня есть шаблон класса BaseClass, который содержит виртуальный метод virtMethod() и не виртуальный метод экземпляра nonVirtMethod().

template<typename T>
public ref class BaseClass {
public:     
    virtual void virtMethod() {

    }

    void nonVirtMethod() {

    }
};

У меня также есть класс DerivedClass, который унаследован от шаблона класса BaseClass

public ref class DerivedClass : public BaseClass<System::String> {
public:
    DerivedClass();
};    

В проекте c ++ я могу вызвать как virtMethod(), так и nonVirtMethod() из экземпляра DerivedClass, но в проекте c #, который ссылается на библиотеку проекта c ++, я могу вызвать только virtMethod(). Можете ли вы объяснить мне, почему это происходит, почему я не могу вызвать метод nonVirtMethod() из DerivedClass экземпляра класса, если он не является виртуальным?

В проекте C ++ (/ clr). Все в порядке:

auto obj = gcnew DerivedClass();
obj->nonVirtMethod();

В проекте C #. Ошибка, DerivedClass не содержит определения для nonVirtMethod():

var obj = new DerivedClass();
obj.nonVirtMethod();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...