2个不同的类如何指向相同的数据表名称

时间:2011-05-06 11:40:42

标签: c++

我需要在方法中初始化一个对象,而不指定对象所在的类。我能这样做吗?

有人可以举个例子吗?

编辑:

MyClass{
...};
MySecondClass
{...
};
void method(*object); //how to write correct??
{..}
MyClass *x= new MyClass();
MySecondClass *y= new MySecondClass();
method(x);
method(y);

3 个答案:

答案 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()
}