gpt4 book ai didi

折叠常量的C++程序

转载 作者:行者123 更新时间:2023-11-28 05:08:53 27 4
gpt4 key购买 nike

我正在用 C++11 编写一个函数,它采用 constant1 + constant2 形式的表达式并将它们折叠起来。 constant1constant2 存储在 std::string 中,它们的类型存储在 enum TypeEnum 中。

我的尝试如下:

程序:

#include<iostream>
#include<assert.h>
#include<string>

using namespace std;

enum TypeEnum {
INT, LONG_INT, LONG_LONG_INT,
UNSIGNED_INT, UNSIGNED_LONG_INT, UNSIGNED_LONG_LONG_INT
};

long long fold(string constant1, string constant2,
TypeEnum typeConst1, TypeEnum typeConst2){

if(typeConst1 == INT){
if(typeConst2==INT)
return stoi(constant1) + stoi(constant2);
if(typeConst2 == LONG_INT)
return stoi(constant1) + stol(constant2);
if(typeConst2 == LONG_LONG_INT)
return stoi(constant1) + stoll(constant2);
if(typeConst2 == UNSIGNED_INT)
return stoi(constant1) + stol(constant2);
if(typeConst2 == UNSIGNED_LONG_INT)
return stoi(constant1) + stoul(constant2);
if(typeConst2 == UNSIGNED_LONG_LONG_INT)
return stoi(constant1) + stoull(constant2);
}else if(typeConst1 == LONG_INT){
//...
}else if(typeConst1 == LONG_LONG_INT){
//...
}else if(typeConst1 == UNSIGNED_INT){
//...
}else if(typeConst1 == UNSIGNED_LONG_INT){
//...
}else if(typeConst1 == UNSIGNED_LONG_LONG_INT){
//...
}

assert(false);
}
int main(){
cout << fold("1","9223372036854775806",INT,LONG_LONG_INT) << endl;
cout << fold("1","2147483647",INT,INT) << endl;
return 0;
}

输出:

9223372036854775807

-2147483648

如您所见,fold 函数变得非常困惑和冗长。我想知道是否有更好的方法来做到这一点。

最佳答案

使用 switch{} 构造:

switch(typeConst1){
case INT:
switch(typeConst2){
case INT:
return stoi(constant1) + stoi(constant2);
case LONG_INT:
return stoi(constant1) + stol(constant2);
case LONG_LONG_INT:
return stoi(constant1) + stoll(constant2);
case UNSIGNED_INT:
return stoi(constant1) + stol(constant2);
case UNSIGNED_LONG_INT:
return stoi(constant1) + stoul(constant2);
case UNSIGNED_LONG_LONG_INT:
return stoi(constant1) + stoull(constant2);
case LONG_INT:
//...

关于折叠常量的C++程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43961045/

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