使用单成员结构作为成员本身

时间:2018-12-19 13:51:00

标签: c++ visual-c++

我使用结构来公开typeafish接口,例如:

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

在后台,此接口的每个实现都定义了自己的struct:

struct _BAR { Baz baz };

我目前以这种方式调用许多分配函数:

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

是否可以通过在static_cast定义中添加数据来使用类型更安全的强制转换(例如struct _BAR)来调用它们?

2 个答案:

答案 0 :(得分:1)

如@Quentin的评论中所述,这违反了ODR(一种定义规则)。我不确定您的目的是什么,但是您可以考虑满足您需求的两件事。一种是使用模板。另一种是使用void *。但我只是猜测,希望对您有所帮助。

答案 1 :(得分:1)

我将一个空结构作为基础:

// For base interface
struct _BAR {};

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

在这种情况下,static_cast就可以了,它将是合法的C ++