我想获得一个可以是整数或字符串的输入,并希望将其传递给重载函数,以便可以自动检测候选函数并生成输出。有没有办法做到这一点?
答案 0 :(得分:3)
没有办法自动,但你当然可以通过编程方式进行。
由于编译器在编译时无法知道输入是否为数字,因此无法获得“免费”。
答案 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