Hii,
当我遇到这个想法时,我正在编写一个用于排序的通用函数。通常我们给出数据并调用以通用方式编写的函数sort。我想知道我们是否可以在运行时使用泛型动态接受输入的数据类型。
就像,如果我们想要对某些数据进行排序,并且我们不知道事先给出的输入类型。因此,我们需要动态获取输入的数据类型并执行排序。
有可能...... ???
答案 0 :(得分:0)
答案 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
进行比较,这才有意义。