)
我想知道如何创建一个引用模板的引用或指针 其中我不知道具体的模板参数类型。
e.g。我有
vector<int> a;
vector<float> b;
现在我希望能够创建一个变量(在本例中为c),它可以包含对a或b的引用或任何其他vector的特化,例如:
vector<>& c; // <- generic reference to all specializations of class vector<T>
c = a;
cout << c.size() << endl;
c = b;
cout << c.size() << endl;
我知道不可能调用push_back或任何其他采取或返回模板化类型的参数的操作,但我只想调用size()等方法,而不是需要有关具体模板参数的知识。
非常感谢您的帮助!
答案 0 :(得分:4)
无法做到。模板是编译器将从中生成多个无关类型的源。如果您想创建通用代码,您可能会:
答案 1 :(得分:0)
你想要的是运行时多态性。不管是否使用模板,在C ++中,这只能通过继承和虚方法来完成。
因此,您唯一的选择是创建一个基本接口,然后创建一个继承基类的模板化类。然后,所有专用类共享相同的继承类,您可以从中调用虚函数。
不幸的是,如果您不能控制模板化的类,例如vector
,则无法使用此方法,因此在这种情况下您无法执行此操作,除非构建一个新的类提供了常见的行为并在引擎盖下执行施法(类型擦除是一种“自动”的提升模板方式,但我宁愿在我的具体情况下自己编写课程。)
我的帖子here可能会让您感兴趣。