动态接受数据类型的输入

时间:2010-11-21 05:23:35

标签: c++ c generics

Hii,

当我遇到这个想法时,我正在编写一个用于排序的通用函数。通常我们给出数据并调用以通用方式编写的函数sort。我想知道我们是否可以在运行时使用泛型动态接受输入的数据类型。

就像,如果我们想要对某些数据进行排序,并且我们不知道事先给出的输入类型。因此,我们需要动态获取输入的数据类型并执行排序。

有可能...... ???

2 个答案:

答案 0 :(得分:0)

是的,如果somebody之前只有that ...

库中的排序算法通常非常通用。你只需要告诉他们如何比较你的对象。

答案 1 :(得分:0)

  

我想知道我们是否可以在运行时使用泛型动态接受输入的数据类型......

     

....我们想要对一些数据进行排序,我们不知道之前给出的输入类型......

不,你不能用C ++模板做到这一点(当你说泛型时我假设你是模板)。

C ++模板是一种语言功能,它允许在编译使用它们的代码之前不指定代码中的类型。也就是说,C ++模板是编译时功能。

如果编译代码时所涉及的所有类型都已知,那么您可以使用C ++模板。在排序示例中,如果您知道要排序的数据的确切类型,则可以使用the std::sort() function之类的内容。

如果在运行之前无法确定对象的确切类型(这显然是您所描述的情况),则应使用通过virtual函数的多态性。使用您的排序示例,您可能有这样的基类:

class SortableInput
{
public:
    virtual bool IsLessThan(SortableInput& rhs) = 0;
};

然后你的不同类型可以从中得出:

class SortableItemA : public SortableInput
{
public:
    virtual bool IsLessThan(SortableInput& rhs) { /* */ }
};

class SortableItemB : public SortableInput
{
public:
    virtual bool IsLessThan(SortableInput& rhs) { /* */ }
};

// ...

然后你的排序功能只需知道SortableInput。当然,如果SortableItemA实际上可以与SortableItemB进行比较,这才有意义。