我正在尝试创建一个编译时间矩阵作为模板参数
template<typename TROW, TROW... TMATRIX>
struct CTestMatrix
{
constexpr std::tuple<TROW...> GetData() { return TMATRIX; }
};
int main()
{
CTestMatrix<decltype(std::make_tuple('A', 'B', 'C', 'D', 'E')),
std::make_tuple('A', 'B', 'C', 'D', 'E'),
std::make_tuple('F', 'G', 'H', 'I', 'J'),
std::make_tuple('K', 'L', 'M', 'N', 'O'),
> cTestMatrix{};
return 0;
}
我收到此错误..
错误 C2993:“std::tuple
”:不是非类型模板参数“TMATRIX”的有效类型 MSVC .34.31933\include uple(232,40): 消息: 'tuple ' 不是 a 错误 C2641:无法推导“CTestMatrix”的模板参数
错误 C2783:“CTestMatrix
CTestMatrix(void)”:无法推导模板>
消息:请参阅“CTestMatrix”的声明
错误 C2780:'CTestMatrix
CTestMatrix(CTestMatrix )':> >
消息:请参阅“CTestMatrix”公共基类的声明
需要 1 个参数 - 0 个为“TROW”提供的参数
正如错误所述,您不能使用元组作为模板参数。另外,您不能将包作为元组返回,这些是不同的东西。
正确的代码是这样的:
CTestMatrix<char,
'A', 'B', 'C', 'D', 'E',
'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O',
> cTestMatrix{};
班级:
template<typename TROW, TROW... TMATRIX>
struct CTestMatrix
{
constexpr std::array<TROW, sizeof...(TMATRIX)> GetData() { return {TMATRIX...}; }
};
如果您想发送一个包含所有值的非类型模板参数,您可以在 C++20 中:
template<std::array data>
struct CTestMatrix
{
constexpr decltype(data) GetData() { return data; }
};
并这样使用它:
CTestMatrix<{
'A', 'B', 'C', 'D', 'E',
'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O',
}> cTestMatrix{};