关于 C++中 type_name 关键字的理解与应用

2019-09-24 15:03:16 +08:00
 LitostCheng

关于 C++中 type_name 关键字的理解与应用

  今天在 Github 上有看到一个有趣的项目:dbg-macro。见名知意:其功能类似于一个 Debug 宏,但比较有趣的地方在于,其能够输出变成语句,以及相应的结果,而不需要我们通过printf等形式输出具体信息。   以下是一个具体的例子:

#include <vector>
#include <dbg.h>

// You can use "dbg(..)" in expressions:
int factorial(int n) {
  if (dbg(n <= 1)) {
    return dbg(1);
  } else {
    return dbg(n * factorial(n - 1));
  }
}

int main() {
  std::string message = "hello";
  dbg(message);  // [example.cpp:15 (main)] message = "hello" (std::string)

  const int a = 2;
  const int b = dbg(3 * a) + 1;  // [example.cpp:18 (main)] 3 * a = 6 (int)

  std::vector<int> numbers{b, 13, 42};
  dbg(numbers);  // [example.cpp:21 (main)] numbers = {7, 13, 42} (size: 3) (std::vector<int>)

  dbg("this line is executed");  // [example.cpp:23 (main)] this line is executed

  factorial(4);

  return 0;
}

  本人在查看源码的过程中,对于以下实现中的dbg_macro::type_name不太理解:

#define dbg(...)                                                     \
  dbg_macro::DebugOutput(__FILE__, __LINE__, __func__, #__VA_ARGS__) \
      .print(dbg_macro::type_name<decltype(__VA_ARGS__)>(), (__VA_ARGS__))

代码连接点这里

  还往各位大神试点迷津。

3284 次点击
所在节点    C++
3 条回复
hardwork
2019-09-24 16:20:31 +08:00
type_name 不是关键字,只是一个模板函数,返回值是 std::string, 你在代码里搜这个函数就看到了
GeruzoniAnsasu
2019-09-24 16:25:15 +08:00
LitostCheng
2019-09-24 19:47:37 +08:00
@GeruzoniAnsasu 嗯嗯,我再好好看看,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/603720

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX