我使用结构来公开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
)来调用它们?
答案 0 :(得分:1)
如@Quentin的评论中所述,这违反了ODR(一种定义规则)。我不确定您的目的是什么,但是您可以考虑满足您需求的两件事。一种是使用模板。另一种是使用void *
。但我只是猜测,希望对您有所帮助。
答案 1 :(得分:1)
我将一个空结构作为基础:
// For base interface
struct _BAR {};
// For an implementation
struct Baz : BAR { ... };
在这种情况下,static_cast就可以了,它将是合法的C ++