class Foo1: public IFoo
{
public:
template <class T>
std::vector<T> foo()
{
return std::vector<T>();
}
};
class Foo2: public IFoo
{
public:
template <class T>
std::vector<T> foo()
{
return std::vector<T>();
}
};
如何为上面的两个实现定义一个公共接口类,例如std::vector<T> foo()
为这个接口定义的?忽略函数的实现是相同的。
更新:
我正在编写一个 Container 类,它表示通过 C api 发送给我的数据。
我的 Container 的一个实例将存储给定类型的数据,例如Container<int>, Container<std::string> and Container<Foo>
.
C api 以一种非常尴尬的方式返回数据,将来可能会改变。我可以将数据复制到例如 std::list 或 std::vector 中,但由于从 C api 传递了如此多的数据,因此尚不知道这是否可以。
因此,Container 类应该独立于数据的实际存储方式。我使用传递给构造函数的 Getter 和 Setter 类来实现这一点,如下所示:
Container<int>(Getter1<int>(uglyCApiContainer),Setter1<int>(uglyCApiContainer));
因此,如果我放弃处理 C api 如何存储数据的 Getter1 和 Getter2,我只需要更改 Containers 的创建。
但是,我对这种设计有疑问。类型 Foo。
Foo 是一种复杂类型,它自身包含一组容器。目前它看起来像这样:
class Foo
{
public:
...
template <class V>
Container<V> getMember(std::string& memberName)
};
所以一个给定的 Foo 可以有一组不同类型的容器。我事先知道这些成员的类型,因为它们存储在模型中。Foo 目前是丑陋的 C api 内存实现的包装器,但我也想为 Foo 分离内存表示,就像我为容器所做的那样。
我不确定如何让 Foo 摆脱它的内存实现。我的一个想法是让 getMember 虚拟化,以便引入可能不同的实现,但这对于模板化函数是不可能的。