用于创建文件名的预处理器指令
我必须一一打开文件才能用 C/C++ 读取。文件的名称是in0、in1、in2、in3...... 我尝试使用预处理器指令来创建文件名。 我想要类似的东西。
for(int i=0;i<n;i++)
{
string inp_file="/path/"+"in"+APPEND(i); //to generate /path/in1 etc
open(inp_file);
}
其中 APPEND 是一个宏。 由于
#define APP(i) i
可以生成值,
#define APP(i) #i
因此可以将令牌转换为字符串。
我试图以多种方式将它们结合起来,但失败了。 如何获得所需的结果,或者是否有可能通过宏获得这样的结果?
I have to open files one by one for reading in C/C++. The name of the files are in0, in1, in2, in3.....
I tried to use preprocessor directive to create file names.
i want something like.
for(int i=0;i<n;i++)
{
string inp_file="/path/"+"in"+APPEND(i); //to generate /path/in1 etc
open(inp_file);
}
where APPEND is a MACRO.
Since
#define APP(i) i
can generate the value
#define APP(i) #i
can convert a token to string.
I am trying to combine them both in many ways but failed.
How to get the desired result or is it even possible to get the such a result with macro?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
在您的情况下,变量 i 不是编译时常量,因此不可能使用预处理器或模板专门化,因为在编译时根本不知道该值。您可以做的是将整数转换为字符串 -
boost。 lexical_cast
是最容易使用的解决方案之一:如果您碰巧有一个支持 C++11 的编译器,您可以使用
std::to_string()
。例如:希望有帮助。祝你好运!
In your case, the variable
i
is not a compile-time constant and so it is impossible to use pre-processor or template specialization because the value is simply not known at a time of compilation. What you can do is convert integer into string -boost.lexical_cast
is one of the easiest to use solutions:If you happen to have a compiler with C++11 support, you could use
std::to_string()
. For example:Hope it helps. Good Luck!
Vlad 答案的附录——如果由于某种原因你不能/不愿意使用 Boost,你可以使用标准 C++ 和 stringstream 类来完成你想要的事情:
Addendum to Vlad's answer -- if for some reason you're not able/willing to use Boost, you can accomplish what you want using standard C++ with the
stringstream
class:如果您不使用 boost,请尝试以下操作:
按以下方式使用:
If you're not using boost, try this:
Use it this way:
只是对现有答案的补充,如果您使用的是更新的编译器和标准库,c++11 会引入
std::to_string()
。所以你可以写这样的代码:Just an addition to the existing answers which are all great, if you are using a newer compiler and standard library, c++11 introduces
std::to_string()
. So you can write code like this:C 的解决方案是这样的:
The C solution is this :