c++ - 在编译时检查字符的唯一性

标签 c++ c++11 constexpr compile-time

是否可以在 C++11(不是更高版本)中编写一个函数来验证在编译时传递给它的字符的唯一性

verify('a');
verify('b');
verify('c');
verify('a');  //should cause compilation error

[MK编辑回答一些问题]:

  • 调用总是在同一个范围内,就像上面那样一个接一个。
  • 宏观解决方案也是可以接受的
  • 也可以接受非类型模板参数

最佳答案

不完全是你要求的,但考虑到你的限制(相同的范围和宏解决方案是可以接受的)你可以尝试这样的事情:

#define verify(x) class _tmp_##x {};

例子:

int main()
{
    verify(a);
    verify(b);
    verify(a);
    return 0;
}

由于重新定义本地类 _tmp_a 将导致编译失败。

关于c++ - 在编译时检查字符的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48531538/

相关文章:

C++ 按值数字排序映射,键按字母顺序排序

c++ - 优先级特化

c++ - 通过单个函数返回另一个函数的多个参数

c++ - 什么时候实例化 constexpr 函数模板?

c++ - 如何使用 std::copy 将一个 constexpr 数组复制到另一个 constexpr 数组?

c++ - 即使在 C++20 中 std::memcpy 也不是 constexpr 的原因是什么?

c++ - 为什么编译器可以比普通函数更好地优化 lambda?

C++ vector 减少分配大小

c++ - 计算匹配数

c++ - int->double->int 是否保证保值?