代码之家  ›  专栏  ›  技术社区  ›  Aaditya

在c中声明具有指定类型的变量++

  •  -1
  • Aaditya  · 技术社区  · 1 年前

    起初,这似乎是一个微不足道的问题。 我有输入:字符串a,字符串b。 b只接受两个值,“string”和“int”。 我想声明一个新的变量var0,其类型对应于b。

    如何实现逻辑。

    我以为这个功能会起作用,但它不会。

    auto varx(std::string a, std::string b){  
        if(b == "int") return std::stoi(a);  
        return a;  
    }  
    

    例如auto-var0=varx(“43”,“int”);应将var0设置为int var0=43;

    我在讨论中看到了联合或变体,但不确定如何实施。

    1 回复  |  直到 1 年前
        1
  •  1
  •   Derek Roberts    1 年前

    你可以使用C++中所需的功能来实现这一点,你可以使用std::variant来动态处理不同的类型。 以下是一个片段:

    #include <iostream>
    #include <variant>
    #include <string>
    
    // Define a variant that can hold either an int or a string
    using VariantType = std::variant<int, std::string>;
    
    VariantType varx(const std::string& a, const std::string& b) {
        if (b == "int") {
            return std::stoi(a);  // Convert the string to an int
        }
        return a;  // Return the string as is
    }
    
    int main() {
        VariantType var0 = varx("43", "int");
        VariantType var1 = varx("Hello", "string");
    
        // To get the value out of the variant, you need to use std::get
        if (std::holds_alternative<int>(var0)) {
            std::cout << "var0 is an int: " << std::get<int>(var0) << std::endl;
        } else {
            std::cout << "var0 is a string: " << std::get<std::string>(var0) << std::endl;
        }
    
        if (std::holds_alternative<int>(var1)) {
            std::cout << "var1 is an int: " << std::get<int>(var1) << std::endl;
        } else {
            std::cout << "var1 is a string: " << std::get<std::string>(var1) << std::endl;
        }
    
        return 0;
    }