C++结合参数模板元编程

Rob*_*tra 5 c++ templates metaprogramming

我是C++中模板和元编程的新手.我现在要做的是以下内容:我有一个带有模板的结构,它需要类型为char的非类型可变参数包,定义如下:

template <char ... chs> 
struct MyStruct
{};
Run Code Online (Sandbox Code Playgroud)

我有第二个结构模板,需要两种类型,如下所示:

template <typename ch1, typename ch2>
struct Together
{

};
Run Code Online (Sandbox Code Playgroud)

我想要实现的是:

cout << Together<MyStruct<'a','b'>, MyStruct<'c','d'>>::result << '\n';
Run Code Online (Sandbox Code Playgroud)

哪个必须打印:abcd

提前致谢

Pra*_*han 3

使用模板,您可以通过部分专业化来实现模式匹配。声明一个主模板声明,如下所示:

template <typename First, typename Second>
struct Together;
Run Code Online (Sandbox Code Playgroud)

然后以某种方式为具有“外观”的类型定义部分特化:

template <char... ch1s, char... ch2s>
struct Together<MyStruct<ch1s...>, MyStruct<ch2s...>>
{
  std::string result;
  Together() : result({ch1s..., ch2s...}){}
};
Run Code Online (Sandbox Code Playgroud)