gpt4 book ai didi

c++ - 运行时类型推导和代码重复

转载 作者:行者123 更新时间:2023-11-30 01:37:39 26 4
gpt4 key购买 nike

我有一些由枚举器的值定义的类型,它们表示从文件中读入的数据类型。我希望根据数据的类型做不同的处理流程,但是会导致很多代码重复:

#include <iostream>

enum dataType {
type1,
type2,
type3
};

struct File {
File(dataType type):type{type}{};
dataType type;
};

void process_file(File file)
{
if(file.type == dataType::type1){ std::cout << "Do work A" << std::endl; };
if(file.type == dataType::type2){ std::cout << "Do work B" << std::endl; };
if(file.type == dataType::type3){ std::cout << "Do work C" << std::endl; };
}


int main(){
File file(dataType::type2);
process_file(file);
return 0;
}

我的主要问题是必须通过“if”或 switch 语句检查值。想象一下,有 50 种类型而不是 3 种,检查每一种类型就变得很繁琐且容易出错。

有人知道解决这个问题的方法吗?模板代码是显而易见的尝试,但我坚持使用枚举器来确定类型,所以我认为模板代码在这里是不可能的,至少我所做的尝试没有成功。

最佳答案

摆脱switch的典型方法是继承和虚函数:

struct File {
virtual ~File() = default;
virtual void process() = 0;
};

struct Type1File : public File {
void process() override { std::cout << "Do work A" << std::endl; };
};
struct Type2File : public File {
void process() override { std::cout << "Do work B" << std::endl; };
};

int main(){
std::unique_ptr<File> file = std::make_unique<Type1File>();

file->process();
return 0;
}

关于c++ - 运行时类型推导和代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49264144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com