不同类型的类

时间:2016-03-15 15:09:02

标签: c++ class inheritance vector

我正在开发一个C ++ ROS项目,它包含不同的类,每个类都包含一个向量。

困难在于载体可以是不同类型的。例如:

class A{
    public
        .....
    private 
        std::vector<Class_C> List
}
class B{
    public  
        .....
    private 
        std::vector<Class_D> List
}

我怎么能完成这样的任务?我想找到一种使用模板,继承和其他语言功能来简化代码的方法。

3 个答案:

答案 0 :(得分:3)

只需使用模板参数:

DECLARE @t TABLE (n int)
DECLARE @n int = (SELECT MAX(LEN(s) - 2) FROM @strs)

WHILE @n > 0 
BEGIN
    INSERT INTO @t (n) VALUES (@n)
    SET @n = @n - 1
END

SELECT s.s, p.s, p.pat 
FROM @strs s 
    LEFT JOIN 
        (
            SELECT s, n, SUBSTRING(s, n, 3) AS pat 
            FROM @strs CROSS JOIN @t
            WHERE n <= LEN(s) - 2 
        ) p ON s.s <> p.s
WHERE CHARINDEX(p.pat, s.s) = p.n

这允许template <typename T> class A{ public ..... private std::vector<T> List; } 拥有任何类型的A

vector

答案 1 :(得分:1)

由于我的声誉无法发表评论,我必须写一个答案,但Gill Bates' answer可以解决您的问题,即使您不清楚您想要完成什么。为了扩展他的答案,你可以使用基于他的模板类的继承来简化你的编码并强制将一个类型放入你的列表中(在这种情况下你还需要将列表可见性改为protected):

class FooInt : public A<int>{
    public
        void print() { /* print List's content */ }
...
};

class FooString : public A<std::string>{
    public
        void print() { /* print List's content */ }
...
};

您以这种方式使用您的课程:

FooInt hello;
hello.print(); // Would print list of int

FooString moto;
moto.print(); // Would print list of string

请注意,类的名称只写为Foo *,以帮助您了解其基础列表将包含以名称编写的类型,这可能是您继承自A类的类B ...

答案 2 :(得分:0)

这就是你要找的东西吗?

template <typename T>
class A {
    public:
        .....
    protected: 
        std::vector<T> List;
};

class B : public A<Class_D> {
    public:
    .....
};

B b;