gpt4 book ai didi

c++ - 连接两个 `const char` 字符串文字

转载 作者:IT老高 更新时间:2023-10-28 22:37:51 26 4
gpt4 key购买 nike

是否可以使用 constexpr 连接两个字符串文字?或者换一种说法,可以消除代码中的宏,例如:

#define nl(str) str "\n"

int main()
{
std::cout <<
nl("usage: foo")
nl("print a message")
;

return 0;
}

更新:使用"\n"没有什么问题,但是我想知道是否可以使用constexpr来替换那些类型的宏。

最佳答案

一点点 constexpr,撒上一些 TMP 和顶部的索引给了我这个:

#include <array>

template<unsigned... Is> struct seq{};
template<unsigned N, unsigned... Is>
struct gen_seq : gen_seq<N-1, N-1, Is...>{};
template<unsigned... Is>
struct gen_seq<0, Is...> : seq<Is...>{};

template<unsigned N1, unsigned... I1, unsigned N2, unsigned... I2>
constexpr std::array<char const, N1+N2-1> concat(char const (&a1)[N1], char const (&a2)[N2], seq<I1...>, seq<I2...>){
return {{ a1[I1]..., a2[I2]... }};
}

template<unsigned N1, unsigned N2>
constexpr std::array<char const, N1+N2-1> concat(char const (&a1)[N1], char const (&a2)[N2]){
return concat(a1, a2, gen_seq<N1-1>{}, gen_seq<N2>{});
}

Live example.

我会进一步充实这一点,但我必须开始并想在那之前放弃它。你应该能够从中工作。

关于c++ - 连接两个 `const char` 字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13292237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com