Изменение типов переменных после инициализации переполнения стека

Я пришел из node.js и мне было интересно, есть ли способ сделать это в C ++. Что будет эквивалентом C ++:

var string = "hello";
string = return_int(string); //function returns an integer
// at this point the variable string is an integer

Так что в C ++ я хочу сделать что-то вроде этого …

int return_int(std::string string){
//do stuff here
return 7; //return some int
}
int main(){
std::string string{"hello"};
string = return_int(string); //an easy and performant way to make this happen?
}

Я работаю с JSON и мне нужно перечислить некоторые строки. Я понимаю, что я мог бы просто присвоить возвращаемое значение return_int() к другой переменной, но я хочу знать, возможно ли переназначить тип переменной из строки в int для обучения и читабельности.

2

Решение

В самом языке C ++ нет ничего, что позволяло бы это. Переменные не могут изменить свой тип. Однако вы можете использовать класс-оболочку, который позволяет его данным динамически менять тип, например: boost::any или же boost::variant (C ++ 17 добавляет std::any а также std::variant):

#include <boost/any.hpp>

int main(){
boost::any s = std::string("hello");
// s now holds a string
s = return_int(boost::any_cast<std::string>(s));
// s now holds an int
}

#include <boost/variant.hpp>
#include <boost/variant/get.hpp>

int main(){
boost::variant<int, std::string> s("hello");
// s now holds a string
s = return_int(boost::get<std::string>(s));
// s now holds an int
}
3

Другие решения

Это невозможно. C ++ является статически типизированным языком, то есть типы не могут изменяться. Это не будет работать с авто или любым другим способом. Вы должны будете использовать другую переменную для int. В C ++ 11 и новее вы можете сделать:

std::string str = "hello";
auto i = return_int(str);

Или же:

int i = return_int(str);

В любом случае, если вы спросите меня, вызывать целое число «строка» немного странно.

2

По вопросам рекламы [email protected]