如何在 C++ 编译时打印完整的模板参数

t.g*_*.g. 5 c++ templates

假设我已经实现了一个这样的模板类:

template <size_t N> class C 
{
     void f()
     {
        // print out N here?
     }
};
Run Code Online (Sandbox Code Playgroud)

我希望当编译器编译一个子句时

C<20> c;
Run Code Online (Sandbox Code Playgroud)

它会打印出一条消息

“C 类以 N = 20 为模板”

我试过 #pragma 和 static_assert 都是徒劳的。

问题是

  1. 使用#pragma 和static_assert,我无法将积分(此处为20)嵌入到消息中;
  2. 对于预处理器,现在还没有用 20 替换 N 还为时过早。

有没有办法或没有办法?

谢谢。

Cha*_*via 1

由于编译时预处理器阶段发生在模板实例化之前,因此您不能让编译器根据模板使用预处理器指令执行的操作发出自定义消息。此外,C++ 模板虽然非常强大,但没有任何能力在编译时发出自定义消息。