【发布时间】:2011-05-22 17:16:09
【问题描述】:
我想知道是否存在某种形式的类型擦除来处理具有相同名称和参数但返回不同值的方法,如下面的示例(begin 和end)。我不打算在任何地方实际使用它,我只是想知道它是否可能,如果可能,如何完成。
我知道的唯一类型擦除形式是有一个指向纯虚拟concept 类的指针,该类指向一个model<T>,它将调用转发到底层T。但是,这要求所有T 包含具有完全相同签名的方法,而在我的示例中,返回类型不同。据我所知,需要类似于虚拟模板函数的东西来完成我的要求,但我可能会遗漏一些东西。
class Iterable
{
//how would this be defined?
}
int main(int argc, char *argv[])
{
vector<int> v = {1, 2, 3, 4, 5};
set<string> s = {"foo", "bar", "baz"};
Iterable iterable;
if(argc == 2) iterable = v;
else iterable = s;
for(auto val : it)
{
cout << val << ' ';
}
}
【问题讨论】:
标签: c++ c++11 type-erasure