将字符串文字作为类型参数传递给类模板

新手上路,请多包涵

我想声明一个类模板,其中一个模板参数采用字符串文字,例如 my_class<"string">

任何人都可以给我一些可编译的代码来声明一个简单的类模板吗?


注意:这个问题的 先前措辞 对于提问者实际试图完成的内容相当模棱两可,并且可能应该因为不够清楚而被关闭。然而,从那时起,这个问题多次被称为规范的“字符串文字类型参数”问题。因此,它已被重新措辞以同意该前提。

原文由 Mawg says reinstate Monica 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 869
2 个回答

抱歉,C++ 目前不支持使用字符串文字(或真实文字)作为模板参数。

但是重新阅读您的问题,这就是您要问的吗?你不能说:

 foo <"bar"> x;

但你可以说

template <typename T>
struct foo {
   foo( T t ) {}
};

foo <const char *> f( "bar" );

原文由 anon 发布,翻译遵循 CC BY-SA 2.5 许可协议

我没有看到提到的另一个 C++20 解决方案,但它足够简单并且适合我自己的需要,它是使用 constexpr lambda 作为 NTTP 返回字符串:

 #include <string_view>

template<auto getStrLambda>
struct MyType {
    static constexpr std::string_view myString{getStrLambda()};
};

int main() {
    using TypeWithString = MyType<[]{return "Hello world!";}>;
    return 0;
}

编译器资源管理器示例 在这里

原文由 James Mart 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题