语言:CPP(C ++)
我不确定是否梦想过这个,但是是否可以将类对象作为参数传递给期望不是类类型的函数,而是类中的类。
非常好,而不是做功能(object-> target_variable) 我可以有一些规则,所以我可以做到
function(object)
等于:
function(object->target_variable)
有没有办法指定这种期望的行为?
答案 0 :(得分:1)
好的,这不再符合评论。如果是“基本上是合同”那么创建一个!例如:
struct IDeliverSDLSurface {
virtual SDL_Surface* GetSurface() const = 0;
virtual ~IDeliverSDLSurface() = default;
};
class A : public IDeliverSDLSurface {
SDL_Surface* m_Surface;
// implements IDeliverSDLSurface
virtual SDL_Surface* GetSurface() const
{
return m_Surface;
}
// other stuff
};
class B : public IDeliverSDLSurface { /* etc */ };
// etc.
然后写一个中间层,其中服务采用IDeliverSDLSurface*
并将表面传递给适当的“引擎”服务,例如:
namespace Intermediate {
void Foo(IDeliverSDLSurface* p_Object)
{
// call engine's Foo
Engine::Foo(p_Object->GetSurface());
}
void Bar(IDeliverSDLSurface* p_Object)
{
// call engine's Bar
Engine::Bar(p_Object->GetSurface());
}
// etc
}
可以编写一个更复杂(半自动)的调度程序,但是你明白了......在客户端你可以调用Intermediate
中的函数,其中所有类型的所有实例都实现{ {1}}:
IDeliverSDLSurface
答案 1 :(得分:1)
您可以在类中创建一个强制转换运算符,然后每当某个函数需要某种类型并且您提供该类的实例时,它将提供其成员。如果您有多个成员可能希望像这样处理(具有相同类型),则不起作用。
或者您可以重载该函数,接受对该类实例的引用,并使用实例成员调用原始函数。这里的缺点是你需要为每个类重载函数,或者为所有这些类创建一个共同的祖先(一个接口或“契约”)。
答案 2 :(得分:1)
正如SvenS指出的那样,你可以在类中创建一个强制转换操作符。这是一个转换为const char *的示例。这段代码会出现在你的班级中:
// operator to cast to a const char *
//
operator const char *()
{
m_pStr[m_nSize] = '\0';
return(m_pStr);
}
完整示例请参阅:http://msdn.microsoft.com/en-us/library/ts48df3y.aspx