【发布时间】:2019-09-02 05:28:42
【问题描述】:
也许它已经被回答或常见的事情,但我错过了一些适当的术语来搜索它。
对于下面的示例代码:
// In a separate file
enum class SignsEnum : uint32_t
{
S1 = 0,
S2,
S3
};
std::array<SignsEnum, 10> arrayMyEnum1 = {{.....}};
// other template class file
template<typename ENUM_T, typename ARRAY_T>
class SignsProc
{
int32_t SignConvrsn(ENUM_T InSign)
{
}
int32_t ProcData(ARRAY_T& InData)
{}
}
模板类将使用来自上述示例枚举和数组类型的模板参数进行实例化:
例如SignsProc<SignsEnum , std::array<SignsEnum, 10>> objSignsProc;
实际上,我可能需要再向类的模板参数传递 4-5 个类型。而,例如在上面的示例中,array 将“SignsEnum”类型的对象作为数组元素保存。现在,此类型再次作为第一个模板参数传递,因此函数 (SignConvrsn) 可以像上面的示例中那样定义。那么,是否有可能以某种方式找到并使用数组类型中的“SignsEnum”类型,而不必单独传递它?
问题是:模板参数太多(而且似乎是多余的)
目的是:减少模板参数的数量
谢谢
编辑(附加场景):
如果在这种情况下,数组元素是一个结构,并且该结构元素中没有一个是SignsEnum类型,那么是否可以从中提取“SignsEnum”类型?
// In a separate file
enum class SignsEnum : uint32_t
{
S1 = 0,
S2,
S3
};
struct SignsConfig
{
SignsEnum sign;
int32_t config1;
int32_t config2;
}
std::array<SignsConfig, 10> arrayMyEnum1 = {{.....}};
【问题讨论】:
-
std::array暴露了value_type特征;这就是你要找的东西吗? -
ARRAY_T是否总是某种std::array? -
value_type 绝对有帮助!目前,总会有一些数组。但是又出现了一种情况。如果数组元素是某个结构,并且该结构包含类型“SignsEnum”。那么是否可以提取该类型?
-
关于查找初始化数组的结构类型,我将使用 "decltype(ARRAY_T::value_type::sign)" .. 所以,我想我得到了答案。谢谢。
标签: c++ c++11 type-conversion underlyingtype