在 C++ 模板函数中接收相同类型的可变大小的原始数组
Receive variadic sized raw arrays of the same type in a C++ template function
我想实现如下逻辑,不知道可不可以:
#include <stddef.h>
#include <array>
template<size_t SIZE>
constexpr std::array<const char*, 1> fun(const char (&name)[SIZE])
{
return {name};
}
template<size_t SIZE_1, size_t SIZE_2>
constexpr std::array<const char*, 2> fun(const char (&name1)[SIZE_1], const char (&name2)[SIZE_2])
{
return {name1, name2};
}
// I would like to do something like this:
template<size_t... SIZES>
constexpr std::array<const char*, sizeof...(SIZES)> fun(const char (&/*???*/)[SIZES]/*...*/)
{
//???
}
int main()
{
static constexpr auto fun1 = fun("aaa");
static constexpr auto fun2 = fun("aaa", "bbb");
//static constexpr auto funN = fun("aaa", "bbb", "ccc");
}
重要的是将参数作为原始数组获取,以便对它们执行额外的编译时魔法。
使用类型别名
,知道将 ...
放在哪里要简单得多
template<std::size_t N>
using chars = const char (&)[N];
template<std::size_t... SIZES>
constexpr std::array<const char*, sizeof...(SIZES)> fun(chars<SIZES>... names)
{
return { names... };
}
在 coliru
上查看
我想实现如下逻辑,不知道可不可以:
#include <stddef.h>
#include <array>
template<size_t SIZE>
constexpr std::array<const char*, 1> fun(const char (&name)[SIZE])
{
return {name};
}
template<size_t SIZE_1, size_t SIZE_2>
constexpr std::array<const char*, 2> fun(const char (&name1)[SIZE_1], const char (&name2)[SIZE_2])
{
return {name1, name2};
}
// I would like to do something like this:
template<size_t... SIZES>
constexpr std::array<const char*, sizeof...(SIZES)> fun(const char (&/*???*/)[SIZES]/*...*/)
{
//???
}
int main()
{
static constexpr auto fun1 = fun("aaa");
static constexpr auto fun2 = fun("aaa", "bbb");
//static constexpr auto funN = fun("aaa", "bbb", "ccc");
}
重要的是将参数作为原始数组获取,以便对它们执行额外的编译时魔法。
使用类型别名
,知道将...
放在哪里要简单得多
template<std::size_t N>
using chars = const char (&)[N];
template<std::size_t... SIZES>
constexpr std::array<const char*, sizeof...(SIZES)> fun(chars<SIZES>... names)
{
return { names... };
}
在 coliru
上查看