相关疑难解决方法(0)

宏获取当前命名空间和函数名称(但不是完整签名)?

是否有一个C++宏获取当前的命名空间和函数名称?例:

namespace foo {
  namespace bar {
    void baz(int i, double d) {
      std::cout << MACRO << std::endl;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

会打印foo::bar::baz.我知道,__FUNCTION__但它没有给出命名空间.并BOOST_CURRENT_FUNCTION给出了整个签名,包括.参数和返回类型:

void foo::bar::baz(int, double)
Run Code Online (Sandbox Code Playgroud)

也许,是否可以编写一个从中提取命名空间和函数名称的宏BOOST_CURRENT_FUNCTION

我想将其用于日志记录,以获取日志字符串

foo::bar::baz -- blah logging message blah
Run Code Online (Sandbox Code Playgroud)

c++ macros boost

14
推荐指数
1
解决办法
5835
查看次数

如何让常见的 C++ 编译器打印特定行所在的命名空间?

我试图找出一堆代码中哪里缺少命名空间的右大括号(即得到:

\n\n
At end of source: error: expected a "}"\n
Run Code Online (Sandbox Code Playgroud)\n\n

错误)。也许有更聪明的方法可以解决这个问题,但是 - 我想尝试在代码中的不同点检查当前的命名空间是什么。我不需要宏;我不需要字符串;我不需要运行时存在的东西。我只想让编译器以某种方式打印名称空间。如果它位于#error、 a#warning或某些构造中,如果编译失败,会产生其中的命名空间错误,对我来说没问题。

\n\n

我想概括的例子:

\n\n
namespace ns1 { }\nnamespace ns2 {\nnamespace ns3 {\n\n// MAGIC GOES HERE\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这个源文件缺少某个}地方。但是 - 我忘记关闭 ns1 了吗?或者也许是ns2?我不记得了——它们离我感兴趣的线很远。所以我想插入一些神奇的东西,它会告诉我我现在所在的命名空间。好吧,对于这个例子,我可以写:

\n\n
namespace ns1 { }\nnamespace ns2 {\nnamespace ns3 {\n\nvoid ns_detector() { return 0; }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用 GCC 6.3 时,出现错误:

\n\n
b.cpp: In function \xe2\x80\x98void ns2::ns3::ns_detector()\xe2\x80\x99:\nb.cpp:5:29: error: return-statement with a value, in function returning \'void\' [-fpermissive]\n void ns_detector() { return …
Run Code Online (Sandbox Code Playgroud)

c++ debugging namespaces compiler-errors nvcc

5
推荐指数
1
解决办法
739
查看次数

标签 统计

c++ ×2

boost ×1

compiler-errors ×1

debugging ×1

macros ×1

namespaces ×1

nvcc ×1