【发布时间】:2017-01-11 10:17:48
【问题描述】:
我还没有使用C++11,所以我自己写了函数to_string(whatever)。仅当它们不存在时才应编译它们。如果我切换到 C++11,它们应该被跳过。我有这样的事情:
#ifndef to_string
string to_string(int a){
string ret;
stringstream b;
b << a;
b >> ret;
return ret;
}
string to_string(double a){
string ret;
stringstream b;
b << a;
b >> ret;
return ret;
}
#endif
这显然不起作用。这样的事情可能吗?如果可以,怎么做?
【问题讨论】:
-
它在 C++11 之前工作,见 cpp.sh/86ldr
-
@ArnavBorborah 好吧,它不应该工作。
std::to_string是 C++11 的东西 -
我个人认为这是一个非常糟糕的做法,这个问题也没有很好的答案。 C++ 标准不提供
to_string,而是提供std::to_string,这是非常不同的。这意味着,如果您的标准不支持,则不能使用std::to_string。现在再想一想 - 假设您已经使用 C++11。现在怎么办?如果您使用已接受答案中的宏,您会在余生中使用它而不是std::to_string吗?非常非常糟糕的主意。 -
它不起作用的原因是
#ifdef只测试预处理器 定义的存在,而不是像std::to_string这样的常规函数。这就是#ifdef可以测试的全部内容,因为预处理器指令由 ... 预处理器执行。
标签: c++ function c++11 methods precompile