我可以在不声明变量类型的情况下获取输入,或者在 c++ 中为同一变量声明多个类型吗?
Can I get input without declaring a variable type or declare multiple type for same variable in c++?
我想获取一个可以是整数或字符串的输入,并希望将其传递给重载函数,以便可以自动检测候选函数并生成输出。有没有办法做到这一点?
没有办法自动执行此操作,但您当然可以通过编程方式执行此操作。
- 在字符串中读取。
- 检查字符串是否为有效数字。
- 如果它是一个数字,则获取其值(通过 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
相关文章:
- 在将变量声明为引用时,堆在释放后使用
- 静态变量声明和定义
- 在变量声明中使用 for 循环
- 向量索引变量声明(size_t 或 std::vector<DATATYPE>::size_type)
- C++ 类型类的变量声明不命名类型?
- 将本地 OpenCV Mat 变量声明为静态以防止重新分配
- std::enable_if 更改成员 *变量* 声明/类型
- 在C++中,变量声明左侧的大括号是什么意思?
- 将变量声明为全局变量,然后声明为局部变量 -Shadowing-
- 命名空间内C++变量声明
- 将静态全局变量声明为内联有什么意义吗?
- 如何将一个变量声明为另一个变量的值
- 如何将迭代器变量声明为私有成员变量
- 没有变量声明为函数,但错误:二进制表达式的操作数无效
- 有没有人有书面证据来保证函数中参数的定义方式与普通变量声明相同?
- ClangTool 如何获取变量声明中模板参数的位置?
- 标准与显式自动推导变量声明
- C 静态变量声明怪异链接器错误
- 如何为数组成员变量声明 getter/setter
- 可视C++变量声明