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

时间:2014-02-10 20:57:50

标签: c++

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

3 个答案:

答案 0 :(得分:3)

没有办法自动,但你当然可以通过编程方式进行。

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

由于编译器在编译时无法知道输入是否为数字,因此无法获得“免费”。

答案 1 :(得分:0)

如果您可以使用boost,那么我能想象到的最接近的事情是使用boost::variant<int,std::string>并重载>>流运算符,就像在{{3}中一样}。

答案 2 :(得分:0)

您可以使用Boost's 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