c++typesauto

declaring a variable with a specified type in c++


Initially, this seems like very trivial problem.

I have input: string a, string b.
b only takes two values, "string" and "int".

I want to declare a new variable var0 with a type that corresponds to b.

How to implement the logic?

I thought this function would work, but it won't.

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

e.g. auto var0 = varx("43", "int"); should set var0 as int var0 = 43;

I have seen union or variant in discussions, but I'm not sure how to implement it.


Solution

  • You can do that using the desired functionality in C++, you can use std::variant to handle the different types dynamically. Here is a snippet:

    #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;
    }