我正在尝试创建一个用C ++解析文件的类。 但是,该文件实际上是2个文件,标题和原始数据。
标题包含原始数据的数据类型(可以是int,double,float等)。 我想在我的类中创建一个存储原始数据的变量。 无论数据类型如何,处理都是相同的。
我应该使用模板来执行此操作吗?使用模板化的类只用于1个变量是不是太过分了?
谢谢。
答案 0 :(得分:2)
使用功能重载怎么样?你说处理是一样的,所以......我想你可以。我有时会用它们来做这种事情。
示例:
Header.h
class MyClass {
public:
void function(int x);
void function(double x);
void function(string x);
void function(char x);
};
编译器将知道要使用的函数,具体取决于您发送(传递)给它的值。
答案 1 :(得分:1)
模板肯定可以帮到你。它们提供了一种减少重复处理的方法,你说对所有类型都是一样的。
你是否“应该”使用它们当然是一个更难的问题,就像它是否过度 - 都是意见问题,但普遍使用会表明只使用一个变量就不会决定因素这一点。
如果需要将包含不同类型的文件的内容处理到同一个容器中,或者如果文件可以包含多个类型,那么升级变体可能更合适。
由于您从文件中读取类型,因此这些类型在运行时是已知的,但由于选项列表在编译时是已知的,因此您可以检查文件中的类型并传入类型。
if(typeFromFile == headerValueForint)
{
processFile<int>();
}
else if (typeFromFile == headerValueFordouble)
{
processFile<double>();
}
然而,因为您列出的所有类型都是数字(我想知道如果有任何其他非数字类型,处理可能真的相同),您可以决定以双精度读取所有值 - 使用适当的范围检查。它可能占用更多内存,但其影响取决于处理实际涉及的内容。