Использование однокомпонентных структур в качестве самого члена - PullRequest
0 голосов
/ 19 декабря 2018

Я использую структуры, чтобы представить интерфейс типов, например:

class IFoo
{
  virtual HRESULT bar(struct _BAR * arg) = 0;
}

За сценой каждая реализация этого интерфейса определяет свою собственную структуру:

struct _BAR { Baz baz };

В настоящее время я вызываю многиеРаспределение функций выполняется следующим образом:

HRESULT allocate(Baz ** baz);
_BAR * bar;
ret = allocate( (Baz **) &bar );

Можно ли вызвать их с более безопасным типом приведения, например, static_cast, добавив данные в определение struct _BAR?

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Я бы сделал пустую структуру в качестве базы:

// For base interface
struct _BAR {};

// For an implementation
struct Baz : BAR { ... };

В этом случае подошел бы static_cast, и это будет допустимо C ++

0 голосов
/ 19 декабря 2018

Как уже упоминалось в комментариях @Quentin, это нарушение ODR (одно правило определения).Я не уверен, какова ваша цель, но вы можете рассмотреть 2 вещи, чтобы удовлетворить ваши потребности.Один использует шаблон.Другой должен использовать void *.но я просто догадываюсь и надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...