gpt4 book ai didi

c++ - 如果在 c++ 之前未定义,则定义函数/方法

转载 作者:IT老高 更新时间:2023-10-28 22:34:45 25 4
gpt4 key购买 nike

我还没有使用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

这显然不起作用。这样的事情可能吗?如果可以,怎么做?

最佳答案

这是 namespace 的主要目的之一存在。

我的建议是将您的个人功能包含在适当的命名空间中,例如:

namespace myns {
std::string to_string(...) {
// ...
}
// etc...
}

这是避免 future 冲突问题的基础。

之后,当您要使用该函数时,您可以通过 MACRO 替换简单地选择正确的函数。

类似:

#if (__cplusplus >= 201103L) 
#define my_tostring(X) std::to_string(X)
#else
#define my_tostring(X) myns::to_string(X)
#endif

注意 __cplusplus 是一个 pre-defined macro 其中包含有关标准版本的编译信息。


编辑:
不那么“暴力”的东西,它将根据标准版本为该特定功能选择适当的命名空间:

#if (__cplusplus >= 201103L) 
using std::to_string;
#else
using myns::to_string;
#endif

// ... somewhere
to_string(/*...*/); // it should use the proper namespace

关于c++ - 如果在 c++ 之前未定义,则定义函数/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com