FriendOfAsherah Ответов: 0

Свойства Visual C++: нет виртуальных геттеров/сеттеров?


Я попытался реализовать свойства в "интерфейсе"
interface IPolygon 
{
  __declspec(property(get = _GetArea)) double area;

  // getters setters
  virtual double _GetArea() const abstract;
};
class  CPoly : public IPolygon
{
    public:
      CPoly(.....) { ......}
    protected:
      // propertis getter/setter
      virtual double _GetArea()    const override { return .. calculation  of area ... }; 
}
.. somewhere in code:
CPoly mypolygon;
double xarea = mypolygon.area;
...
Но при использовании CPoly-класса линкер! говорит, что IPolygon::_GetArea() еще не реализован. Затем меняется
interface IPolygon 
{
  __declspec(property(get = _GetArea)) double area;

  // getters setters
  virtual double _GetArea() const { return this->_GetArea(); }
};

вызов геттера в "интерфейсе" он будет работать
но это не так, как должно быть ...

Есть ли способ определить абстрактные геттеры и сеттеры свойств или абстрактные свойства? чтобы получить интерфейс, похожий на c#.
(это не вопрос, имеет ли смысл использовать propertis в c++ в любом случае!)

Что я уже пробовал:

Перепробовали вышеперечисленные коды и варианты
Отладили шаг b и при имплементации чего-либо в виртуальный фонд в IPolygon (вместо абстрактного),
отладчик переходит в эту функцию, а не в унаследованную функцию класса (поэтому IPolygon::_GetArea() вызывается вместо CPoly::_GetArea() )

0 Ответов