【发布时间】:2015-12-05 21:55:24
【问题描述】:
我正在尝试编写可以为POJ 编译的代码。 POJ 不使用 C++11,所以我不能使用真正基本的 STL 函数,例如 std::to_string、std::begin 或 std::end。我环顾四周,发现another StackOverflow question 在询问std::to_string。为了让std::to_string 代码用一个简单的g++ myfile.cpp 命令编译,一个用户推荐了这个补丁,它工作得很好:
namespace patch
{
template < typename T > std::string to_string( const T& n )
{
std::ostringstream stm ;
stm << n ;
return stm.str() ;
}
}
我想为std::begin、std::end 和std::stoi 做同样的事情,但我不知道该怎么做。我对STL很陌生。我只希望我的工作 C++11 代码可以使用 MS-VC++6.0 或 G++ 编译没有任何标志等。我该怎么做?
【问题讨论】:
-
简短的回答是“你不能”。这些是 C++ 11 的特性,你需要 C++ 11 来完成它(或 C++ 14)。你可以像上面的补丁那样实现你自己的 std::begin 等实现。但是你必须用你拥有的任何版本的 C++ 来编写它。
-
@mrunion,为什么这么难过?当然你可以在 C++03 中做 std::begin、std::end 和 std::stoi。
-
好吧,您无法将它们放入
namespace std本身,但您可以解决这个问题。 -
在现代 VS 提供的头文件中查看这些函数的代码,并弄清楚如何对其进行调整。基本上,您需要一个调用
c.begin()的版本,但需要另一个专门用于数组的版本。