我对我的程序有一个简单的问题:如何使用Set
而不是int
调用此模板函数?
我这里有一个名为Set
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
class Set
{
public:
class Iterator;
void add(T v);
void remove(T v);
Iterator begin();
Iterator end();
private:
vector<T> data;
};
这是我的cpp:
不幸的是,main不能是模板函数,所以我不得不创建另一个函数addstuff
,主要调用
template <class T>
Set<T> addstuff()
{
Set<T> a;
a.add(1);
a.add(2);
a.add(3);
a.add("a string");
return a;
}
void main()
{
addstuff<Set>(); //<< Error here. If I use addstuff<int>(), it would run but
//I can't add string to it. I am required to be able to add
//different data types to this vector
}
答案 0 :(得分:5)
您的写作addstuff<Set>()
将尝试解决Set<Set> addstuff()
毫无意义的问题。
addstuff<std::string>()
将允许您将std::string
添加到您的集合中,但是a.add(1)
会失败,因为文字无法隐式转换为字符串类型
addstuff<int>()
确实工作,但这是一个快乐的巧合。 add(1)
在该实例中具有正确的类型,以添加到Set<int>
。
你可以构建一个类Foo
,它具有字符串和整数的非显式构造函数,并使其成为您的模板类型:addstuff<Foo>()
。但是,我不相信你的教授想要你做什么,并且有更好的方法来解决这个问题(一种类型的擦除,但这已经非常复杂)。