0

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

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

4

2 回答 2

1

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

于 2018-12-19T14:11:24.870 回答
1

我会做一个空结构作为基础:

// For base interface
struct _BAR {};

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

在这种情况下 static_cast 会做,它会是合法的 C++

于 2019-01-01T08:55:58.943 回答