C++ 未知变量类型。我应该使用模板吗?

C++ unknown variable type. Should I use template?

我正在尝试创建一个 class 来解析 C++ 中的文件。 然而该文件实际上在 2 个文件中,header 和原始数据。

header 包含原始数据的数据类型(可以是 int、double、float 等...)。 我想在 class 中创建一个变量来存储原始数据。 无论数据类型如何,处理都是一样的。

我应该使用模板来执行此操作吗?仅对 1 个变量使用模板化 class 是不是太过分了?

谢谢。

使用函数重载怎么样?你说处理是一样的,所以...我想你可以。我有时会用它们来做这种事情。

示例:

Header.h

class MyClass {
public:
    void function(int x);
    void function(double x);
    void function(string x);
    void function(char x);
};

编译器将知道要使用哪个函数,具体取决于您发送(传递)给它的值。

模板当然可以在这方面为您提供帮助。他们提供了一种方法来减少您所说的对所有类型都相同的处理重复。

你是否"should"使用它们当然是一个更困难的问题,因为它是否过度杀伤力 - 两者都是意见问题,但普遍使用表明仅使用一个变量不会是决定这一点的因素。

如果包含不同类型的文件的内容需要处理到同一个容器中,或者如果一个文件可以包含多种类型,那么boost变体可能更合适。

由于您从文件中读取类型,因此这些类型在运行时已知,但由于选项列表在编译时已知,您可以检查文件中的类型并传入类型。

if(typeFromFile == headerValueForint)
{
    processFile<int>();
}
else if (typeFromFile == headerValueFordouble)
{
    processFile<double>();
}

然而,由于您列出的所有类型都是数字(我想知道如果有任何其他非数字类型,处理过程如何真正相同)您可以决定以双精度读取所有值 - 具有合适的范围检查。它可能会占用更多内存,但其影响取决于处理实际涉及的内容。