我可以在不声明变量类型的情况下获取输入,或者在 c++ 中为同一变量声明多个类型吗?

Can I get input without declaring a variable type or declare multiple type for same variable in c++?

本文关键字:变量 声明 类型 情况下 获取 输入 或者 我可以 c++      更新时间:2023-10-16

我想获取一个可以是整数或字符串的输入,并希望将其传递给重载函数,以便可以自动检测候选函数并生成输出。有没有办法做到这一点?

没有办法自动执行此操作,但您当然可以通过编程方式执行此操作。

  • 在字符串中读取。
  • 检查字符串是否为有效数字。
  • 如果它是一个数字,则获取其值(通过 atoi() 或类似值)并将其传递给函数的整数版本。
  • 否则,请将字符串传递给函数的字符串版本。

没有办法"免费"获得这个,因为编译器在编译时无法知道输入是否是一个数字。

如果你可以使用 boost,我能想象到的最接近你想要的事情就是使用 boost::variant<int,std::string> 并重载 >> 流运算符,就像在另一个问题中一样。

你可以使用Boost的lexical_cast,或者不太复杂(取决于你需要什么),std::strtol()或字符串流:

#include <cstdlib>
#include <iostream>
#include <sstream>
void Process( const long         num ) { std::cout << "int: " << num << "n"; }
void Process( const std::string& str ) { std::cout << "str: " << str << "n"; }
int main()
{
    std::string s;
    while( std::cin >> s )
    {
        char* end;
        const auto i = std::strtol( s.c_str(), &end, 10 );
        if( end == s.c_str() + s.length() )
            Process( i );
        else
            Process( s );
        std::istringstream iss( s );
        int j;
        if( iss >> j )
            Process( j );
        else
            Process( s );
    }
}

使用输入"abc 123",我得到输出:

str: abc
str: abc
int: 123
int: 123