Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 动态接受输入的数据类型_C++_C_Generics - Fatal编程技术网

C++ 动态接受输入的数据类型

C++ 动态接受输入的数据类型,c++,c,generics,C++,C,Generics,嗨 当我遇到这个想法时,我正在编写一个用于排序的通用函数。通常,我们给出数据并调用以通用方式编写的函数sort。我想知道我们是否可以在运行时使用泛型动态地接受输入的数据类型 比如,如果我们想对一些数据进行排序,但我们不知道之前给出的输入类型。因此,我们需要动态地获取输入的数据类型并执行排序 有可能吗 是啊,要是以前想到过就好了 库中的排序算法通常非常通用。你只需要告诉他们如何比较你的对象 我想知道我们是否可以在运行时使用泛型动态地接受输入的数据类型 …我们想对一些数据进行排序,但我们不知道之前给

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

比如,如果我们想对一些数据进行排序,但我们不知道之前给出的输入类型。因此,我们需要动态地获取输入的数据类型并执行排序

有可能吗

是啊,要是以前想到过就好了

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

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

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

不,你不能用C++模板来做这件事。我假设你在泛型时是模板。

C++模板是一种语言特性,允许在编译使用它们的代码之前不指定代码中的类型。也就是说,C++模板是编译时特性。 如果所有的类型都是在编译代码时知道的,那么你可以使用C++模板。在排序示例中,如果您知道要排序的数据的确切类型,则可以使用类似的内容

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

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进行比较时才有意义。

用什么语言?C、C++和java的答案可能非常不同。不确定我是否理解这个问题,但这不是java数组、SoRoToStup[]、比较器吗?我想知道它是否可以用C/C++来完成。编辑: