我需要在方法中初始化一个对象,而不指定对象所在的类。我能这样做吗?
有人可以举个例子吗?
编辑:
MyClass{
...};
MySecondClass
{...
};
void method(*object); //how to write correct??
{..}
MyClass *x= new MyClass();
MySecondClass *y= new MySecondClass();
method(x);
method(y);
答案 0 :(得分:2)
使用模板。
template <typename T>
void method(T* object) {
// do stuff with the object, whose real type will be substituted for `T`
}
模板有点复杂,因此请阅读C ++中有关它们的章节以获取更多信息。
答案 1 :(得分:1)
听起来你正在寻找一个界面。您将定义一个适合您的方法正在进行的任何需求的接口。
class MyInterface
{
public:
virtual void doSomething1() = 0;
virtual void doSomething2() = 0;
};
class MyObject : public MyInterface
{
public:
void doSomething1()
{
// Code here
}
void doSomething2()
{
// Code here
}
};
有些不清楚你有没有b / c你没有显示任何代码的情况,但是让你想要调用类的方法。 (如果还没有)
class ClassWithMethod
{
public:
ClassWithMethod(MyInterface &myI)
:x(myI)
{
}
void methodYouUseInjectedObject()
{
// Code
x.doSomething1();
// More code
}
private:
MyInterface &x;
};
然后在您实例化ClassWithMethod的应用程序代码中,您将“注入”您想要调用的对象的具体类型。
int main(int argc, char *argv[])
{
MyObject myObject;
ClassWithMethod classMethod(myObject);
// Call the method that will use the injected object.
classMethod.methodYouUseInjectedObject();
return 1;
}
编辑:(基于更新的问题)
如果要创建一个可以采用两个不同(和不相关)对象的方法,但使用相同的方法签名则可以使用模板。
class ClassWithMethod
{
public:
template <class T>
void methodYouUseInjectedObject(T object)
{
T.doSomething();
}
};
这与我上面的方法类似,不同之处在于您不需要从界面中派生出不同的对象。
答案 2 :(得分:0)
您可以使用模板。
template<typename T>
void method(T object) {
object.doSomething()
}