不同类C ++的对象列表

时间:2012-06-10 16:56:58

标签: c++ class list

我已经想出使用多态并让列表存储指向baseClass的指针,但是在成功放置它之后,我想知道该对象最初是什么类。我正在使用类的模板,并希望有另一个字段,它将是基本类型的枚举。

现在的问题是:有没有办法检查(在运行时或编译期间)

(if T == int)  
   field = INT

我虽然可能与预处理器有关,但我对此并不熟悉。

4 个答案:

答案 0 :(得分:4)

多态性背后的整个想法是隐藏特定的实现,使其在程序流中透明化。使用类的类型作为指标将使您的代码膨胀if语句并且将更难维护。

我建议您重新考虑您的设计并使用预期的行为方法创建一个抽象类,并使用此类类型作为列表对象类型。比每个对象调用接口方法(在抽象类中声明并在派生类中实现)

答案 1 :(得分:1)

您可以使用运营商typeid

例如,如果T是指向基类的指针:

if (typeid(SomeDerivedClass) == typeid(*T))
...

(我有点不清楚为什么你在谈论与多态性有关的int时。int无法从中派生出来。)

答案 2 :(得分:1)

您可能正在寻找的是被称为类型特征。它们允许您确定特定类型的属性并对其进行操作。您可以从std::is_integral()std::is_floating_point()开始,然后根据您的要求进行构建。

enum Type
{
    Unknown,
    Integral,
    Float
};

....

Type field = Unknown;

if(std::is_integral<T>::value)
{
    field = Integral;
}

else if(std::is_floating_point<T>::value)
{
    field = Float;
}

答案 3 :(得分:0)

C ++预处理器对C ++一无所知。它是一个通用的符号操纵器,可以与大多数任何编程语言一起使用,或者就任何文本处理应用程序使用,例如单词或方程布局处理的特征。

您可以将typeid operator视为构建此类机制的一种方法,但请注意该页面上的滥用RTTI 部分。