所以我有一个默认C ++ vector
的包装器。我的类是一个像vector这样的模板类,所以它基本上适用于我想要支持的所有类型。现在我有一个问题。我想在我的包装器中添加一个函数,让我将内部存储的vector
保存到文件中。但是,我用来执行此操作的库具有较差的C函数C ++接口,并要求我传递void*
和预定义类型列表的条目。
假设我有班级:
template<class T>
class MyClass
{
dataType type;
std::vector<T> data;
MyClass()
{
//
}
};
我有三种我想支持的类型(例如):
float:floatType
int:intType
char:charType
问题:
答案 0 :(得分:2)
如果您只需要支持这三种类型,您可以使用模板功能,专门为它们实现:
template<class T> class MyClass {
...
f();
};
template<> MyClass<float>::f();
template<> MyClass<int>::f();
template<> MyClass<char>::f();
并在关联的C ++文件中准确提供这些参数的实现。当使用另一个模板参数在实例上调用f()
时,链接器会抱怨缺少符号,因为没有可用的专用实现。
答案 1 :(得分:0)
如果您只想支持某些类型的T,您可以隐藏模板并提供您想要的类型:
typedef MyClass<int> MyClass_32s;
typedef MyClass<float> MyClass_32f;
...
之后你可以为你的c接口编写一个包装器:
void passToCInterface(MyClass_32s& dat)
{
callCInterfaceFunction(static_cast<void*>(&(dat.data)), INT_FLAG);
}
void passToCInterface(MyClass_32f& dat)
{
callCInterfaceFunction(static_cast<void*>(&(dat.data)), FLOAT_FLAG);
}
...